我正在为我的新项目使用WPF4和PRISM4.
有一个模块,里面有几个视图.DI完成统一.当我第一次从ViewA导航到ViewB时,会创建ViewB并调用其构造函数.但是当我第二次尝试导航到ViewB时,未创建ViewB,但重用了现有实例.
我正在使用IRegionManager.RequestNavigate进行导航.
我试图将TransientLifeTimeManager传递给RegisterType Unity方法,但无济于事.
有没有办法在每次导航时配置棱镜和/或统一来创建新视图?
谢谢.
Jon*_*Jon 20
执行此操作的正确方法INavigationAware是在View或ViewModel中实现(Prism将首先检查视图,如果未实现INavigationAware,则还将检查ViewModel).
您特别感兴趣的是该IsNavigationTarget方法,该方法告诉Prism是否应重用View的当前实例,或者是否应创建另一个实例来满足导航请求.因此,要始终创建一个新视图,您将执行以下操作:
public class MyViewModel : INavigationAware {
bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext)
{
return false;
}
void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext)
{
}
void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
{
}
}
Run Code Online (Sandbox Code Playgroud)
所有这些都在Prism 4文档的第8章中有更详细的解释; 他们还有一个如何工作的插图,这非常好,因为它也让你知道你可以在哪里挂钩和如何.
Ela*_*atz 16
这样做的方法是在你的视图或viewModel上实现IRegionMemberLifetime,并在布尔属性KeepAlive中返回false,如下所示:
public class EmployeeDetailsViewModel : IRegionMemberLifetime
{
public bool KeepAlive
{
get { return false; }
}
}
Run Code Online (Sandbox Code Playgroud)