C# 使用1个模型的多个视图模型?

C# 使用1个模型的多个视图模型?,c#,wpf,mvvm,C#,Wpf,Mvvm,我有viewmodel1和viewmodel2 Viewmodel1需要显示模型中包含的某种类型的列表中的数据。 Viewmodel2需要将数据输入到模型中包含的列表中 所以Viewmodel1和Viewmodel2都需要“了解”模型 在MVVM中执行此操作的正确方法是什么 我应该在应用程序中创建模型,并给viewmodel1和viewmodel2一个参考,还是?如果我认为ViewModel是一个模型,只为视图翻译,我会觉得这很有帮助 您有几个选择: 创建用于设置ViewModel的控制器。如

我有viewmodel1和viewmodel2

Viewmodel1需要显示模型中包含的某种类型的列表中的数据。 Viewmodel2需要将数据输入到模型中包含的列表中

所以Viewmodel1和Viewmodel2都需要“了解”模型

在MVVM中执行此操作的正确方法是什么


我应该在应用程序中创建模型,并给viewmodel1和viewmodel2一个参考,还是?

如果我认为ViewModel是一个模型,只为视图翻译,我会觉得这很有帮助

您有几个选择:

  • 创建用于设置ViewModel的控制器。如果ViewModel需要来自多个位置的信息,这通常是一个不错的选择。您可以为ViewModel提供所需所有信息的引用,也可以将其设置为普通的旧.NET对象(PONO),并让控制器为您进行设置

  • 只需按照您的建议将引用传递到ViewModel。如果不同类之间不需要交互,则此选项非常有用

  • 连接,可用于在模型更改时发布通知,并将通知传递给ViewModels,以便他们每个人都可以在需要时获取/存储模型

我真的很喜欢最后一种模式,因为如果您发现需要更多能够访问这些模型的演示者或控制器,那么它很容易扩展。它还允许您注入一个存储库,这意味着您以后可以更轻松地转移到一个良好的RESTful面向服务的体系结构


如果您以前没有做过很多依赖注入,那么请考虑通过构造函数来完成。这将帮助您避免在ViewModels准备就绪之前尝试使用ViewModels的情况,并让ViewModels完成自己的工作。您可能还想看看类似或的框架,它们可以帮助您进行这种连接,但这实际上只适用于大型企业项目(甚至不是所有项目)。

您一定是用错误的方式思考了。。在MVVM中,模型一直包含在视图模型中。。假设有一个ObservableCollection,则viewmodel中会有一个属性用于此,您应该在viewmodel的构造函数/某些方法中初始化此集合。。两个viewmodels都将像这样初始化ProductType。。在我看来,您应该尝试创建Classed For Model、ViewModel和Repository,并在其中使用IoC

这是一个关于mvvm的非常好的视频,你应该试试这个视频,并看看代码

如果您提到的列表永远不会改变,您应该尝试为此创建一个单例ViewModel,并在其他ViewModel中引用该ViewModel


问候。

很好<代码>模型就是它们听起来的样子:数据模型。它们是用来保存数据的虚拟对象,应用程序的其余部分可以根据需要使用这些数据

ViewModels
是反映视图的模型。例如,假设您有一个
LoginViewModel
和一个
ManageUsersViewModel
。这两个视图模型都可以与
UserModel
数据对象一起使用,但是它们是完全不同的视图模型,用于完全不同的事情


在大多数情况下,我会将加载
模型
的责任留给
视图模型
。例如,您通常不会在用户登录之前预加载用户列表,以便用户对象可用。插入时,您的
LoginViewModel
将进行自己的数据库调用,以获取登录用户的用户模型,而
managerUserViewModel
将进行自己的数据库调用,以获取可以修改的用户列表。

您可以显示一些您的模型的代码吗?我还没有开始编写代码。例如:模型对象包含一个包含人员的列表。Viewmodel1仅在视图上显示此列表。Viewmodel2将新人员插入列表。因此,这两个视图模型都需要连接到模型对象,因此这两个视图模型都在一个视图上?我没有使用C#的经验。但即便如此,我一直被教导,业务逻辑的正确位置在模型中。更不用说数据库调用了,这始终是模型的职责。