PRISM Xamarin - 使用标签页(IActiveAware)

时间:2017-12-07 01:23:15

标签: xaml xamarin xamarin.forms prism

我有实现不同视图的标签页,但在导航时我无法初始化每个标签页。

<TabbedPage.Children>     
    <tabPages:Page1/>
    <tabPages:Page2/>
    <tabPages:Page3/>
</TabbedPage.Children>

所以我做的是使用IActiveAware作为prism文档建议知道哪个标签页当前是活动的。所以我有这个课程:

public abstract class TabbedChildViewModelBase : BaseViewModel, IActiveAware, INavigationAware, IDestructible

protected bool IsInitalized { get; set; }

    private bool _IsActive;
    public bool IsActive
    {
        get
        {
            return _IsActive;
        }
        set
        {
            SetProperty(ref _IsActive, value, RaiseIsActiveChanged);
        }
    }

    public event EventHandler IsActiveChanged;

    public virtual void OnNavigatingTo(NavigationParameters parameters)
    {

    }

    protected virtual void RaiseIsActiveChanged()
    {
        IsActiveChanged?.Invoke(this, EventArgs.Empty);
    }
    public virtual void Destroy()
    {

    }
}

因此每个子视图模型都继承子视图模型库:

 public class Page1 : TabbedChildViewModelBase
 {
    public CurrentSeaServiceViewModel()
    {
        IsActiveChanged += HandleIsActiveTrue;
        IsActiveChanged += HandleIsActiveFalse;
    }

    private void HandleIsActiveTrue(object sender, EventArgs args)
    {
        if (IsActive == false)
        {
            TestLabelOnly = "Test";
        }

        // Handle Logic Here
    }

    private void HandleIsActiveFalse(object sender, EventArgs args)
    {
        if (IsActive == true) return;

        // Handle Logic Here
    }

    public override void Destroy()
    {
        IsActiveChanged -= HandleIsActiveTrue;
        IsActiveChanged -= HandleIsActiveFalse;
    }
}

问题是,子vm没有初始化。是否需要正确实施IActiveAware或启动IsActive属性

1 个答案:

答案 0 :(得分:0)

不幸的是,我仍然使用IActiveAware来完成将页面绑定到自己的视图模型所需的childtabbedviewmodel工作。

所以这就是我所做的:

<TabbedPage.Children>
      <views:ChildPage1>
          <views:ChildPage1.BindingContext>
              <viewModels:ChildPage1ViewModel/>
          </views:ChildPage1.BindingContext>
      </views:ChildPage1>
      <views:ChildPage2>
          <views:ChildPage2.BindingContext>
              <viewModels:ChildPage2ViewModel/>
          </views:ChildPage2.BindingContext>
     </views:ChildPage2>
</TabbedPage.Children>

我使用了我的观点和BindingContext的属性 使用IActiveAware我也知道当前有哪些标签处于活动状态。希望任何人都能帮助那些在选项卡的子页面上发现问题的人。