2011-07-03 17 views
3

我正在尝试第一次使用MVVM的应用程序。在阅读了一些内容之后,我想我可能会误解模型中的内容。创建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对象,然后返回他们的属性绑定到视图。当用户想要保存更改时,视图模型会使呼叫保持更改。

我是否在我的视图模型中放置太多,应该放在模型中?现在我的模型什么都不做,它们只是代表对象的类。

如果我在这里偏离轨道,有人可以给我一些建议吗?例如,我将如何改变我的上述情况?

谢谢。

回答

4

您的方法没有任何问题。您可以免费使用或者如果您的视图模型需要格式化,则将其映射的模型属性公开;如果不需要进行更改,您可以直接从视图模型中暴露模型。

MVVM是关于可测试性,而不是模式纯度。只要你在做什么,你就可以在以后重构。

0

这对我来说很合适。

我可能是错的,但是我并没有真正看到让视图模型接口从INotifyPropertyChanged派生出来的好处。这似乎是不必要地将两件彼此没有内在联系的东西联系在一起。我只是宣布PersonViewModel类(例如)为:

public class PersonViewModel : IPerson, INotifyPropertyChanged