Prism:如何在区域中注入视图模型实例



在使用Prism几周后,我已经尝试了各种导航方法。但是仍然有一件事是我无法用Prism"开箱即用"实现的:导航到视图模型实例。导航到视图模型或视图类型非常容易,但实际上没有办法导航到真正的视图模型实例

例如,当我有一个不同视图模型实例(不同类型)的列表时,如果选择了一个,并且我想在我的内容区域中显示它,我无法实现它,除非我通过事件聚合发布更改,我不希望这样做,因为这会让我在我的内容区域中坚持一种视图。我想做的是注册一个视图模型实例到一个区域,这样视图就可以从数据模板动态加载。

实际上,我通过创建RegisterViewModelWithRegion作为RegionManager的扩展方法来实现这一点,它工作得很好,但它不是很整洁,因为我必须手动查找我的应用程序资源,加载视图,附加我的视图模型实例,然后将视图添加到我的区域。

我真的觉得我在建筑中错过了一些东西,因为这种实践对我来说是显而易见的,但显然我找不到任何人有同样的关注。

您的帮助和经验将不胜感激。谢谢。

经过与Prism团队的讨论,我发现实际上,使用Region.Add(object view)方法在一个区域中注入视图模型是完全可以的。它将给出完全相同的结果(除了一些小情况)。

我检查了ItemsControlRegionAdapter,它最后所做的就是

regionTarget.ItemsSource = region.Views;

regionTarget是目标控件(例如ListBox), region.Views属性是您注入区域的对象。

当然,谢谢你的帮助Rachel:-)

看看我写的关于在MVVM中使用导航的文章

您的应用程序shell需要一个ViewModel,它定义哪个ViewModelCurrentPage。要更改ViewModel,只需触发一个事件,shell将拾取该事件以将CurrentPage设置为当前的ViewModel。

你可以像这样用PRISM切换页面:

eventAggregator.GetEvent<ChangePageEvent>()
    .Publish(new ChangePageEventArgs(this));

我相信还有其他方法可以做到这一点,但到目前为止,我发现这种方法是最简单的

相关内容

  • 没有找到相关文章

最新更新