0

我有一个带有DetailViewModel对象列表的选择视图。When one of these is selected, it is passed to a detail view (derived from UserControl) using Prism view switching navigation. 因为详细视图是在加载模块时加载的,所以它会在导航到之前尝试绑定到环境数据上下文。

也就是说,当加载模块时,详细视图会加载到 中的区域中,并在导航期间设置其真实视图模型之前MainWindowView尝试绑定到。MainWindowViewModel我想首先防止这种错误的绑定,并且仅在将详细视图分配给它正确的视图模型时才绑定。这可能吗,怎么做?

如果做不到这一点,我是否只能在模块初始化后向区域注册视图,只有当我需要导航到该详细视图时?

4

1 回答 1

1

一种可能对您有用的技术,也是 Prism 中典型的一种技术,是视图注入你可以在这里找到更多关于它的信息。这与视图发现不同,后者是您在模块加载期间预先注册所有内容的地方。

视图注入的前提是您根据发生的事情通过代码将视图分配给区域。因此,与其RegisterViewWithRegion在模块初始化期间使用,不如在控制器中或任何地方执行以下操作。

//IRegionManager regionManager = <get this via ctor injection, or resolve this from the contain>;
IRegion contentRegion = regionManager.Regions["ContentRegion"];
InterestingView view = this.container.Resolve<InterestingView>();
// Set view.DataContext here, maybe...
// either via the container, or newing something up
mainRegion.Add(view);
mainRegion.Activate(view); // shows the view

我没有尝试过,但我看不出为什么DataContext在将视图添加到区域之前无法设置视图的原因。但是,如果您使用ViewModelLocatorPrism 附带的,您可能不必担心它。

您可以在此处的 Prism GitHub 上找到完整的视图注入示例。

您可能知道 Prism 中的模块是可选的。但是,它们确实提供了一种机制,可以让您预先完成所有这些绑定。但是,我可以理解有时需要更多控制。

于 2017-02-04T13:45:27.363 回答