代码之家  ›  专栏  ›  技术社区  ›  KalleP

进入页面后运行一次代码

  •  1
  • KalleP  · 技术社区  · 6 年前

    输入页面时运行此代码:

    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 回复  |  直到 6 年前
        1
  •  3
  •   Mukesh Modhvadiya    6 年前

    正如@mjwills在评论中所说, 使用布尔字段指示代码是否已执行。 在Appearing方法之外声明字段

    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;
    }
    

    应该停止多次运行。

        2
  •  0
  •   Ahmad ElMadi    6 年前

    正如@leroy所说,您可以在运行in it的构造函数中运行它,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");
                             }
                         });
                     }
                }
    

    另一种方法是,既然您有一个外观,也有一个外观,然后您可以删除由外观添加的块。