【发布时间】:2012-03-19 23:24:05
【问题描述】:
据我了解 MVVM,ModelX 类的 XViewModel 应该隐藏该类以防止所有其他类访问,以便 XViewModel 注意到对模型所做的每一次更改。但是有一个问题,我解决不了。
想象一下我有一些课程: 项目模型、用户模型和组模型。 ProjectModel 包含一个 UserModel 列表和一个 GroupModel 列表,其中包含一个 UserModel 列表。
对于所有这些类,都存在 ViewModel: 项目视图模型、用户视图模型、组视图模型。如果需要更改,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。
我不止一次遇到过这个问题,但无论是在谷歌上还是在这里我都找不到一个好的解决方案。
我想到的可能解决方案:
- 通过在每个 ViewModel 类中保存一个属性来授予对模型的访问权限。但这与隐藏模型以防止未经授权的访问的想法相冲突。
- 在 UserViewModel 中实现“公共静态 GroupModel CreateGroup()”,因为它可以访问其模型。但这听起来有点脏。
你是如何解决这个问题的?我是否错过了 MVVP 模式的某些内容?
【问题讨论】:
标签: c# design-patterns mvvm