OnAppearing事件发射两次。带标签页

时间:2016-08-03 03:41:23

标签: xaml mvvm xamarin.ios xamarin.android xamarin.forms

我面临的问题是Xamarin表单和MVVM的初学者。我有标签页,标签下有2页。这是代码。     
          
                 

问题是本地的:ActiveOrderViewPage页面OnAppearing()事件在tabbedPage加载时触发两次,并在OnAppearing()事件下执行两次代码。

请帮助我找到这种情况发生的原因?

这是代码选项卡页面  tabbedpage.xaml

<TabbedPage
        xmlns="http://xamarin.com/schemas/2014/forms"
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
        Title="Orders">
<TabbedPage.Children>  
      <local:ActiveOrderViewPage />  
      <local:SavedOrderViewPage />
</TabbedPage.Children>

tabbedpage.xaml.cs

  public partial class OrderTabViewPage : TabbedPage
{
    public OrderViewModel ViewModel { get { return BindingContext as OrderViewModel; } }
    public OrderTabViewPage()
    {
        InitializeComponent();
     this.BindingContext = ViewModelLocator.OrderVModel;

    }
    public OrderTabViewPage(params object[] arg) : this()
    {
        if (arg != null)
        {
            ViewModel.AccountID = Convert.ToInt32(arg[0]);
        }
    }

这是有效订单.cs

 public partial class ActiveOrderViewPage : ContentPage
{
    public OrderViewModel ViewModel { get { return BindingContext as OrderViewModel; } }
    public ActiveOrderViewPage()
    {
        InitializeComponent();
      this.BindingContext = ViewModelLocator.OrderVModel;       
    }

    //public OrderViewPage() : this()
    //{
    //    ViewModel.AccountID = accuntId;
    //}
    protected override void OnAppearing()
    {
        base.OnAppearing();
        if (ViewModelLocator.OrderVModel.ActiveOrderItems == null || ViewModelLocator.OrderVModel.ActiveOrderItems.List.Count == 0)
        {
            ViewModelLocator.OrderVModel.ActiveOrderCommand.Execute(null);
        }


    }

提前致谢...

1 个答案:

答案 0 :(得分:1)

长期以来遇到这个问题,在意识到之前,我知道这是多么令人沮丧。由于选项卡式页面呈现所有单个页面的方式,事件OnAppearing()将触发两次。它最初呈现页面,然后在您的情况下将呈现另一页,这将导致OnDisappearing()触发。然后第一页获得焦点,导致OnAppearing()再次触发。

如果您只希望在添加子页面后触发一次代码,请将currentpage属性设置为null,这样可以阻止OnAppearing()再次触发