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

标签 c# wpf mvvm

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

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

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

在另一个例子中,似乎 View 自己创建了 Model 对象 并将它们传递给 ViewModels,这似乎不是一个好主意 要么,因为 View 不应该知道模型的任何信息?

有些示例甚至似乎没有模型类,只有 View 和 View 模型。

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

此外,我应该使用依赖注入(inject)框架还是 IoC 容器? 如前所述,我以前没有真正使用过,我认为它可能是 对于我目前正在处理的程序的大小来说,杀伤力太大了​​。没有 真的很认真地研究了任何一个,我可能是误会了。

最佳答案

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

至于依赖注入(inject)和 IoC 容器,正如你所说,它对小项目来说有点矫枉过正,但如果你的项目变大,它可能会给你带来很多好处。

关于c# - 模型通常如何在 ViewModel 对象之间共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4710047/

相关文章:

c# - 如何使用 C# 获取用户的应用程序数据文件夹?

c# - 在整个应用程序中禁用 TAB 导航

C# wpf DbContext 无法隐式转换类型

c# - 代码契约(Contract)由于潜在的副作用而导致错误

c# - 我想获得相同长度的字符串的第一个和第二个字母对(通过使用 LINQ)

c# - 如果经过 3 秒,方法只能再次调用

WPF:DatePicker 文本垂直居中

mvvm - 是否应该通过构造函数、属性或方法调用来初始化 ViewModel

c# - 为什么 CanxxxCommandExecute 被触发这么多次?

c# - 如何处理 WPF/MVVM 应用程序中的依赖注入(inject)