我对 Prism 还很陌生,我目前正在使用 Prism 作为概念验证项目重写我们现有的应用程序之一。
该应用程序使用 MVVM 和 ViewModel 优先方法:我们的 ViewModel 由容器解析,并且IViewResolver
服务确定它应该连接到哪个视图(使用名称约定等)。
目前的代码(将视图添加到选项卡控件)如下所示:
var vm = (get ViewModel from somewhere)
IRegion reg = _regionManager.Regions["MainRegion"];
var vw = _viewResolver.FromViewModel(vm); // Spins up a view and sets its DataContext
reg.Add(vw);
reg.Activate(vw);
这一切都很好,但是我真的很想使用 Prism 导航框架来为我做所有这些事情,这样我就可以做这样的事情:
_regionManager.RequestNavigate(
"MainRegion",
new Uri("NameOfMyViewModel", UriKind.Relative)
);
并让 Prism 启动 ViewModel + View,设置 DataContext 并将视图插入该区域。
我通过创建引用 ViewModel 类型的 DataTemplates 取得了一些成功,例如:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Module01">
<DataTemplate DataType="{x:Type local:TestViewModel}">
<local:TestView />
</DataTemplate>
</ResourceDictionary>
...并在模块初始化时让模块将相关资源字典添加到应用程序资源中,但这似乎有点垃圾。
有没有一种方法可以有效地从 Prism 接管视图创建,以便在RequestNavigate
调用时我可以查看提供的Uri
并基于它启动视图/视图模型?有一个重载RegionManager.RegisterViewWithRegion
需要一个允许您自己提供视图的委托,我想我正在追求类似的东西。
我想我可能需要提供我自己的IRegionBehaviorFactory
,但我不确定所涉及的内容(或者即使我走在正确的道路上!)。
任何帮助表示赞赏!
-- 注意:最初发布在prism codeplex 网站