进入页面一次运行代码

时间:2018-07-12 08:25:06

标签: c# xamarin xamarin.forms

进入页面时,我正在运行以下代码:

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个带有文本的块(两个块中的文本相同)。所以我想做的是只运行一次代码,以防止显示多个文本。

感谢所有帮助,谢谢。

2 个答案:

答案 0 :(得分: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;
}

那应该停止多次运行。

答案 1 :(得分: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添加的块。