导航 MVVM

Posted

技术标签:

【中文标题】导航 MVVM【英文标题】:Navigation MVVM 【发布时间】:2014-09-21 03:37:26 【问题描述】:

我试图坚持 MVVM 设计模式的尝试让我陷入了困境。我有一个视图是站点位置的选择列表。我有一个视图模型,视图从中获取其数据上下文,并且我已经使用按钮等将一些项目绑定到它(耶!)。

现在我正在尝试通过在视图中单击按钮来切换当前视图。

通过单击“开始维护”按钮,我想将视图切换到具有不同视图模型的另一个视图。

所以我知道 MVVM 只是一种设计模式,而且似乎有无数种不同的方式可以使用 MVVM 实现导航。但我见过的大多数解决方案都指向有一个主导航窗格,这不是我打算做的。

我现在计划尝试使用带有 MVVM 光信使模式的 viewmodellocator 来尝试改变我的观点。但是在过去的 3 天里试图硬塞这个东西来工作之后,我越来越绝望了。关于如何实现这一点还有其他建议吗?我确实喜欢 Sheridan 对类似帖子的回答:WPF MVVM navigate views,因为它避免使用工具包/框架。但我认为答案对我来说可能太模糊了,我无法实现它,因为我不明白如何更改视图(Sheridan 的自定义中继消息作为新手很难理解)。

请帮助您的互联网居民! :) 如果你能指出我也喜欢的任何例子!

【问题讨论】:

我一直使用 Sheridan 的方法。如果您详细说明您对此有什么问题,我可能会提供帮助(即,难以遵循 WRT 自定义中继消息的 XAML 或 ICommand 属性?)。 最基本的方法是使用ContentControl并将其Content绑定到SelectedViewModel,然后使用隐式DataTemplates告诉WPF如何绘制每个ViewModel。如果您有兴趣,我的博客上有一个没有 3rd 方库的基本示例:Navigation with MVVM 在 Sheridan 的 MainViewModel 中的 ICommand 示例中,他的操作命令需要两个参数,但我只能在其中填充 1? 当您点击“开始维护”时,您是希望只更换网格,还是更换整个窗口?如果只是网格,那很容易。您可以在那里放置ContentControl,默认.Content 属性将是您的网格。当您单击该按钮时,.Content 将更改为其他视图。如果您希望更改整个窗口,您可能需要考虑使用messaging system 来传递广播消息,并让您的子虚拟机订阅这些消息。 @Rachel-- 对话的结尾被移到了聊天中,现在已经消失了。您能否将解决方案发布为答案?谢谢! 【参考方案1】:

非常感谢Rachel!我创建了一个 mainviewmodel 来实例化我的应用程序中的其他视图模型。然后我使用 MVVM light 使用通用对象的模板发送消息,在模型之间填充消息,然后允许我在主视图模型中处理消息并切换视图模型上下文!

感谢大家的帮助!

【讨论】:

以上是关于导航 MVVM的主要内容,如果未能解决你的问题,请参考以下文章

关于mvvm页面导航的两个问题

.NET Core 3 WPF MVVM框架 Prism系列之导航系统

使用 MVVM 的 WPF 导航

在 MVVM WPF 应用程序中处理导航

WPF MVVM 在按钮单击时在视图之间导航

Prism/MVVM (MEF/WPF):从模块中公开导航 [例如菜单]