Выполнить код один раз при вводе страницы

Я запускаю этот код при вводе страницы:

protected override async void OnAppearing()
     {
         base.OnAppearing();

         Title = wasteObject.WasteType;

         foreach (var i in wasteDescription)
         {
             if (i.description_Id == wasteObject.Waste_Id)
             {
                 await viewModel.getDescription(i.wasteImage, i.sortName, i.wasteDescription, myWebView, (error) => 
                 {
                     if(error != null)
                     {
                         DisplayAlert("Problem", "Not possible", "Ok");
                     }
                 });
             }
         }

     }

Проблема, с которой я сталкиваюсь, заключается в том, что когда я покидаю эту страницу и возвращаюсь к ней. Он создал 2 блока с текстом (тот же текст в обоих блоках). Так что я хочу сделать, это запустить код один раз, чтобы предотвратить появление более одного блока текста.

Цените всю помощь, спасибо.

c#,xamarin,xamarin.forms,

1

Ответов: 2


3 принят

Как сказал @mjwills в комментарии, используйте логическое поле, чтобы указать, если код уже выполнен. Объявить поле вне метода OnAppearing

private bool isTextBlockCreated = false;

Затем поместите код, который нужно запускать только один раз при проверке состояния с помощью isTextBlockCreated

if(!isTextBlockCreated)
{
    foreach (var i in wasteDescription)
         {
             if (i.description_Id == wasteObject.Waste_Id)
             {
                 await viewModel.getDescription(i.wasteImage, i.sortName, i.wasteDescription, myWebView, (error) => 
                 {
                     if(error != null)
                     {
                         DisplayAlert("Problem", "Not possible", "Ok");
                     }
                 });
             }
         }

    isTextBlockCreated = true;
}

Это должно остановить его несколько раз.


0

Поскольку @LeRoy сказал, что вы можете запустить его в конструкторе, который запускает Init, который вызывает viewModel.getDescription ().

protected override async void OnBindingContextChanged()
        {
            base.OnBindingContextChanged();
            if (BindingContext is MyPageViewModel viewModel)
            {
                        foreach (var i in wasteDescription)
             {
            if (i.description_Id == wasteObject.Waste_Id)
                 {
                     await viewModel.getDescription(i.wasteImage, i.sortName, i.wasteDescription, myWebView, (error) => 
                     {
                         if(error != null)
                         {
                             DisplayAlert("Problem", "Not possible", "Ok");
                         }
                     });
                 }
            }

Другой способ сделать это - это то, что, поскольку у вас есть OnAppearing, есть также OnDisappearing, а затем вы можете удалить блоки, которые были добавлены в Appearing.

c #, cyberarin, xamarin.forms,
Похожие вопросы