导航 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的主要内容,如果未能解决你的问题,请参考以下文章