我试图控制何时创建新视图以及何时显示现有视图。
这是 Prism 文档中“导航到现有视图”部分中概述的非常相似的场景,但我无法让它完全工作:http: //msdn.microsoft.com/en-us/library/gg430861 (v=pandp.40).aspx
我发现我可以从 ok 开始创建视图/视图模型,但是我无法创建它的新实例。即我希望同时存在多个实例。
这是视图模型的示例:
[Export]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class DataEntryPageViewModel : INavigationAware, IRegionMemberLifetime
{
private Guid id;
[ImportingConstructor]
public DataEntryPageViewModel()
{
id = Guid.NewGuid();
}
public bool IsNavigationTarget(NavigationContext navigationContext)
{
// In actual fact there would be more logic here to determine
// whether this should be shown to the user
return false;
}
public void OnNavigatedFrom(NavigationContext navigationContext)
{
}
public void OnNavigatedTo(NavigationContext navigationContext)
{
}
public bool KeepAlive
{
// For the purposes of this example we don't want the view or the viewModel
// to be disposed of.
get { return true; }
}
}
我正在按如下方式导航到此:
m_RegionManager.RequestNavigate(
"MainRegion",
new Uri("/DataEntryPageView", UriKind.Relative));
所以我第一次调用上面的视图时会显示出来。
下次我调用 RequestNavigate 时,IsNavigationTarget 被命中,它返回 false。然后我希望它做的是创建一个新实例,但这并没有发生。我知道它没有发生,因为构造函数没有被命中并且 UI 没有更新以显示视图的新实例。
有什么想法可以让它创建一个新实例吗?
非常感谢,
保罗
编辑
我注意到第二次调用 RequestNavigate(请求同一视图的另一个实例)时,回调报告错误“视图已存在于区域中”。因此,似乎我可以在一个区域中拥有多个不同视图的实例,但不能拥有同一视图的多个实例。我对此的理解不是很好,所以我可能是错的。