【问题标题】:Creating the Model part of MVVM创建 MVVM 的模型部分
【发布时间】:2011-07-03 00:11:32
【问题描述】:

我正在开发一个我第一次尝试使用 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 对象,然后在属性中返回它们以供视图绑定。当用户想要保存他的更改时,视图模型会调用以保存更改。

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

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

谢谢。

【问题讨论】:

    标签: wpf mvvm


    【解决方案1】:

    你的方法没有错。如果需要格式化,您可以或者从视图模型中公开映射的模型属性,或者如果不需要进行更改,您可以直接从视图模型中公开模型。

    MVVM 是关于可测试性,而不是模式纯度。只要你正在做的工作,你总是可以在以后重构。

    【讨论】:

      【解决方案2】:

      这对我来说是正确的。

      我可能是错的,但我并没有真正看到让您的视图模型接口派生自 INotifyPropertyChanged 的好处。这似乎是不必要地将两个彼此之间没有任何内在关系的事物耦合在一起。我只是将PersonViewModel 类(例如)声明为:

      public class PersonViewModel : IPerson, INotifyPropertyChanged
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多