我正在开发一个应用程序,我第一次尝试使用MVVM。在阅读了一些内容后,我想我可能误解了模型中的内容。
我现在所有的应用程序都是请求获取一些数据,显示它,允许用户编辑它,并在进行更改时保存它。
以下是我当前设置的示例。我读了一些员工数据,这些数据返回了员工组(“经理”,“副总裁”等)。每个组都包含一个人员列表。我创建了一个代表组的接口:
public interface IEmployeeGroup : INotifyPropertyChanged
{
bool IsDirty { get; set; }
string GroupName { get; set; }
ObservableCollection<IPerson> People { get; set; }
}
public interface IPerson : INotifyPropertyChanged
{
bool IsDirty { get; set; }
string PersonName { get; set; }
int Id { get; set; }
}
然后我创建实现这些接口的具体EmployeeGroup和Person类。这就是他们所做的,暴露指定的属性。
这就是我的模特所有。
我的视图模型实现了以下界面:
public interface IEmployeeGroupsViewModel
{
ICommand AddEntryCommand { get; }
ICommand SaveCommand { get; }
ObservableCollection<IEmployeeGroup> EmployeeGroups { get; set; }
ObservableCollection<IPerson> People { get; set; }
}
视图模型调用获取实际数据,创建EmployeeGroup和Person对象,然后在要绑定的视图的属性中返回它们。当用户想要保存他的更改时,视图模型会使调用保持更改。
我是否在我的视图模型中放了太多,而应该在模型中?现在我的模型什么都不做,它们只是代表对象的类。
如果我在这里偏离正轨,有人可以给我一些建议吗?例如,我如何改变上面的场景?
谢谢。
答案 0 :(得分:4)
你的方法没有错。如果需要格式化,您可以 从视图模型中公开映射的模型属性,或者如果不需要进行任何更改,则可以直接从视图模型公开模型。
MVVM是关于可测试性,而不是模式纯度。只要你正在做的事情,你就可以随时重构。答案 1 :(得分:0)
这对我来说是对的。
我可能错了,但我并没有看到使您的视图模型接口派生自INotifyPropertyChanged
的好处。这似乎不必要地将两个彼此之间没有任何内在关系的东西联系在一起。我只是将PersonViewModel
类(例如)声明为:
public class PersonViewModel : IPerson, INotifyPropertyChanged