xaml - OnAppearing 事件触发两次 .with 标签页

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

作为 Xamarin 表单和 MVVM 的初学者,我面临着问题。我有 tabbedpage 和 2 个页面在 tag 下。这是代码。





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

请帮我找出为什么会这样?

这是代码标签页
标签页.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);
        }


    }

提前致谢 ...

最佳答案

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

如果您只希望代码触发一次,在添加子页面后,设置 currentpage属性为空,这应该停止 OnAppearing()从再次开火

关于xaml - OnAppearing 事件触发两次 .with 标签页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38733984/

相关文章:

xamarin.ios - 单点触控对话框在单个 View 上的多个 radio 组(单个根元素)

ios - MonoTouch : DataProtection: how to programmatically find out, 密码锁是否设置?

ios - 单点触控按钮中的事件处理程序问题

c# - silverlight xaml 到 C#

c# - 如何在 uwp 的 xaml 中拉伸(stretch)/调整 svgs 的大小?

java - 无法从外部包访问

java - 在 mvvm 中将 recyclerview 向下滚动到底部

visual-studio-2008 - VS2008 XAML 代码格式化程序

xaml - Windows 8 主题颜色 - 以编程方式访问它

c# - 如何使用 wpf 和使用 mvvm 将窗口置于最前面