我已经用区域管理器为TabControl注册了我的视图,当选择选项卡时,视图会正确显示。
问题是,当我选择新选项卡项时,不会为该视图或其视图模型调用OnNavigatedTo。
我用的是PRISM 63
更新
视图模型
`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)
{
}
}`
View `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;
}
}
}`
2条答案
按热度按时间oaxa6hgo1#
没有密码,没有人能给予你正确的答案。这可能是最好的,如果你给我们你的“TabItem”视图的ViewModel。
假设您在DataContext中注册了视图并正确设置了ViewModel,那么可能会忘记一件简单的事情。
要管理您的问题,请确保您正确地实现了以下内容:
1.为TabControl创建区域
1.注册该区域中的视图
1.确保DataContext已正确设置为ViewModel
1.确保ViewModel实现了INavigationAware
更新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。
现在你可以检测到你的标签是否显示并做出React。
qlvxas9a2#
我知道这是一个相当古老的主题,但这是我对这个问题的简单解决方案。..
我可能会在某个时候重新讨论这个问题,但这对我来说是有效的,所以我可以在发生“导航”时在VM之间传递参数。