据我了解MVVM,ModelX类的XViewModel应该将此类隐藏起来,以防止其他所有类的访问,以便XViewModel注意到对模型所做的所有更改。但是有一个问题,我无法解决。
想象一下,我有一些类(class):
ProjectModel,UserModel和GroupModel。
ProjectModel包含一个UserModel列表和一个GroupGroup列表,其中UserModel列表。
对于所有这些类,都存在ViewModels:
ProjectViewModel,UserViewModel,GroupViewModel。如果需要更改,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。
我曾不止一次遇到这个问题,但是在Google上也遇到了麻烦,在这里我也找不到一个好的解决方案。
我考虑过的可能解决方案:
您是如何解决这个问题的?我会错过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的责任。
希望能帮助到你。
编辑:修复了用户实例的创建。
关于c# - MVVM模式以及从ViewModel到Model的访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9516674/