模型通常如何在ViewModel对象之间共享?

时间:2011-01-17 04:33:37

标签: c# wpf mvvm

假设我有一个程序必须用两种不同的方式表示一些数据 方法。如果我想通过拥有两个不同的ViewModel来实现这一点,那么 看起来他们应该共享Model对象的相同实例。所以 如何在MVVM中使用WPF实现这一点?

我能想到的一种方法是ViewModel构造函数可以使用 适当模型的实例,所有连线都可以在处理程序中完成 对于Application.Startup事件。我不记得在任何一个中都看过这个 到目前为止我见过的例子,但我可能错过了它。

到目前为止,似乎大多数情况下,示例只显示了ViewModels 创建Model类本身的实例,这些实例可以在某些实现 案件,但似乎不是一个很好的解决方案,因为每个 ViewModel将创建自己的Model类实例。它似乎也是 这样就可以消除用一个替换模型的可能性 可能需要的不同的,如单元测试的情况。我 猜测依赖注入框架或IoC容器会消除 那个问题呢?到目前为止,我只使用了手动依赖注入。

在另一个例子中,View似乎创建了Model对象本身 并将它们传递给ViewModels,这看起来并不是一个好主意 或者,因为View不应该对模型有任何了解吗?

有些例子似乎没有Model类,只有Views和ViewModels。

有没有更好的方法我没有提到过?

此外,我应该使用依赖注入框架还是IoC容器? 如前所述,我之前并没有真正使用过,我认为可能是 我目前正在处理的程序大小过大。没有 我真的很重视,我可能会弄错。

3 个答案:

答案 0 :(得分:2)

一般方法是将模型传递给视图模型的构造函数。可能你看过的例子并不是为了简单起见而显示的。因此,如果您有两个使用相同数据(模型)的视图模型,则只需在两者中使用相同的模型实例。

对于依赖注入和IoC容器,正如你所说的那样对小型项目来说太过分了,但如果你的项目变得很大,它可能会给你带来很多好处。

答案 1 :(得分:0)

您可以将应用程序范围的模型设置为单例/静态类。然后,默认情况下共享同一实例。

答案 2 :(得分:-1)

你必须共享模型:如果你不想通过INotifyPropertyChanged更新UI中的数据 - 这是MVVM的主要思想之一 - 你应该共享模型(至少是相关的端口) ViewModel之间的某些ViewModel。

相关问题