我已经使用区域管理器为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;
}
}
}`
答案 0 :(得分:1)
没有代码,没有人可以给你正确的答案。 它可能是最好的,如果你向我们展示你的ViewModel" TabItem"图。
假设您已正确注册视图并在DataContext中设置ViewModel,那么可能会忘记一件简单的事情。
要管理您的问题,请确保正确实施以下内容:
更新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。
现在,您可以检测到标签的显示与否,并做出反应。