使用PRISM区域时,在选择选项卡时,不会在TabControl中调用OnNavigatedTo

时间:2018-02-21 10:47:44

标签: wpf prism

我已经使用区域管理器为TabControl注册了我的视图,并且在选择了选项卡时正确显示了视图。

问题在于,当我选择新的标签项时,不会为该视图或其视图模型调用OnNavigatedTo。

我正在使用PRISM 6.3

更新

ViewModel

`public class ValuationViewModel:IViewModel,INavigationAware     {         private IRegionManager _regionManager;

    public string Title { get; set; }

    public ValuationViewModel(IRegionManager regionManager)
    {
        Title = "PERFORM VALUATION";

        _regionManager = regionManager;
    }

    public void OnNavigatedTo(NavigationContext navigationContext)
    {
    }

    public bool IsNavigationTarget(NavigationContext navigationContext)
    {
        return true;
    }

    public void OnNavigatedFrom(NavigationContext navigationContext)
    {
    }
}`

查看 `public partial class ValuationView:UserControl,IView     {         private IRegionManager _regionManager;

    public ValuationView(ValuationViewModel viewModel)
    {
        InitializeComponent();

        ViewModel = viewModel;
    }

    public IViewModel ViewModel
    {
        get
        {
            return (IViewModel)DataContext;
        }
        set
        {
            DataContext = value;
        }
    }
}`

1 个答案:

答案 0 :(得分:1)

没有代码,没有人可以给你正确的答案。 它可能是最好的,如果你向我们展示你的ViewModel" TabItem"图。

假设您已正确注册视图并在DataContext中设置ViewModel,那么可能会忘记一件简单的事情。

要管理您的问题,请确保正确实施以下内容:

  1. 为TabControl创建区域
  2. 在该地区注册您的观点
  3. 确保DataContext已正确设置为ViewModel
  4. 确保您的ViewModel实施了INavigationAware
  5. 更新1:

    经过多次测试后,遗憾的是我找到了一个简单的答案:

    当NavigationService导航时,会调用INavigationAware( OnNavigatedTo IsNavigationTarget & OnNavigatedFrom )的成员。 如果你点击TabItemHeader,它们就不是。

    要解决您的问题,您有几种选择。 一种选择是在用户单击TabItemHeader(错误方法)时启动导航请求。

    在我看来,你应该使用IActiveAware接口(https://msdn.microsoft.com/en-us/library/microsoft.practices.prism.iactiveaware(v=pandp.50).aspx)。

    它将解决您的问题,因为通过RegionManager导航并单击TabItemHeader会产生相同的结果:INavigationAware.IsActive = true。

    现在,您可以检测到标签的显示与否,并做出反应。