gpt4 book ai didi

c# - MVVM 模式和从 ViewModel 到 Model 的访问

转载 作者:行者123 更新时间:2023-11-30 18:01:00 25 4
gpt4 key购买 nike

据我了解 MVVM,类 ModelX 的 XViewModel 应该隐藏此类以防止所有其他类访问,以便 XViewModel 注意到对模型所做的每个更改。但是有一个问题,我无法解决。

假设我有一些类:项目模型、用户模型和组模型。ProjectModel 包含一个 UserModel 列表和一个 GroupModel 列表,其中包含一个 UserModel 列表。

对于所有这些类,都存在 ViewModel:项目 View 模型、用户 View 模型、组 View 模型。如果需要更改,ProjectViewModel 将所有模型列表包装到 ObservableCollection 中,否则在 ReadOnlyCollection 中。在我的例子中,它是一个 ObservableCollection。

现在想象一下,我想向项目中添加一个组。所以我称之为

UserViewModel user1 = new UserViewModel("Chriss");
UserViewModel user2 = new UserViewModel("Jena");
ProjectViewModel project = new ProjectViewModel();
project.Groups.Add(new GroupViewModel(user1, user2));

现在 GroupViewModel 的构造函数必须通过调用 GroupModel 的构造函数来创建其字段 _groupModel:

public GroupModel(UserModel user1, UserModel user2){}

但不幸的是,GroupViewModel 无法访问 UserViewModel 的字段 _user,因此它无法创建自己的字段 _groupModel。

我不止一次遇到过这个问题,但无论是在谷歌上还是在这里,我都找不到一个好的解决方案。

我想到的可能的解决方案:

  1. 通过在每个 ViewModel 类中保存模型的属性来授予对模型的访问权限。但这与隐藏模型以防止未经授权的访问的想法相冲突。
  2. 在 UserViewModel 中实现“public static GroupModel CreateGroup()”,因为它可以访问其模型。但这听起来有点脏。

你是怎么解决这个问题的?我是否遗漏了有关 MVVP 模式的内容?

最佳答案

这样的事情怎么样:

var user1 = new User("Chriss");
var user2 = new User("Jena");
var userModel1 = new UserViewModel(user1);
var userModel2 = new UserViewModel(user2);
var group = new Group(userModel1 , userModel2);
var project = new ProjectViewModel();
project.Groups.Add(new GroupViewModel(group));

所以您在外部创建组并将其传递给 GroupViewModel。模型的创建不应该是 ViewModel 的责任。

希望对您有所帮助。

编辑:修复了 User 实例的创建。

关于c# - MVVM 模式和从 ViewModel 到 Model 的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9516674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com