如何访问View的ViewModel

时间:2012-03-02 12:23:09

标签: wpf mvvm viewmodel

假设我有一个显示一些文字的简单视图。该文本来自View的ViewModel,它是一个数据绑定的字符串属性。我希望能够在应用程序中的多个位置设置ViewModel的字符串。

在我的应用程序的各个点获取ViewModel实例的最佳做法是什么?

我可以制作ViewModel单身,但这感觉不对。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

我认为有不同的概念。 每个人都有它的优点和缺点......

1。)如果视图模型的构造函数中没有参数,则可以使用Control,View,Page的DataContext属性来绑定视图模型。它按照View ...旋转了一个实例...

2.。)如果你有复杂或组合的视图模型与构造函数注入...最好的方法是基于服务定位器模式的ViewModel定位器模式。

http://johnpapa.net/simple-viewmodel-locator-for-mvvm-the-patients-have-left-the-asylum http://blog.roboblob.com/tag/viewmodellocator/

3。)你必须首先考虑视图或首先考虑模型,也许还要考虑类似于视图模型的婚姻...... http://wildermuth.com/2009/5/22/Which_came_first_the_View_or_the_Model

HTH

答案 1 :(得分:0)

我认为你正在寻找像Messenger这样的东西,你的viewmodel可以注册消息来改变你的字符串属性,而其他组件可以通过messenger发送消息。

另一种方法是PRISM事件聚合器,您可以在应该更改字符串属性时订阅事件。

编辑:另一种不好的方法是将viewmodel的实例提供给所有其他位置。但是你没有松散的耦合。