首页 文章

在ViewModel上使用DependencyProperty和Entity Framework

提问于
浏览
5

我正在使用带有Entity Framework模型的MVVM模式在C#中编写桌面应用程序 . 我倾向于在我的VM中使用DependencyProperties并且(通常)更喜欢这个系统而不是实现INotifyPropertyChanged . 我想保持一致 . 我的虚拟机访问模型中的实体,我设法将事物分开 - 视图除了绑定和命令名称之外没有知道VM,并且模型已知道VM的知识 .

在VM中使用INotifyPropertyChanged,更新模型中的实体似乎很容易:

public string Forename
    {
        get { return CurrentPerson.Forename; }
        set
        {
            if (Forename != value)
            {
                CurrentPerson.Forename = value;
                NotifyPropertyChanged("Forename");
            }
        }
    }

...其中CurrentPerson是由实体数据模型自动创建的Person对象 . 因此,没有专门用于存储Forename的私有字段 .

使用DependencyProperties,似乎我必须使用GetValue和Setvalue创建DP,添加默认属性,然后使用PropertyChangedCallback来更新CurrentPerson实体 . 在这种情况下调用回调似乎增加了开销,以便与我的其他VM保持一致 .

问题是,这些方法中的一种或另一种是我应该做的事情吗?在这种情况下,我应该使用DependencyProperty还是INotifyPropertyChanged?应该指出的一点是,这可能是一个非常大规模的项目(插件和来自不同机器的大量数据库访问),并且所有内容都应该是可重用的,并且尽可能将模块作为"disconnected" .

1 回答

  • 2

    我建议使用INotifyPropertyChanged而不是DependencyProperty . 我在ViewModels中远离DependencyProperty的主要原因是因为DependencyProperty位于WindowsBase.dll中 . 这有点太多关联Windows UI(至少恕我直言) .

    使用INotifyPropertyChanged更容易维护,因为它允许各种插件以他们想要的方式实现它 . 如果强制依赖属性,则所有视图模型都需要从DependencyObject继承 .

    有关使用INotifyPropertyChanged和DependencyProperty的更多详细信息,请参阅此文章:http://kentb.blogspot.com/2009/03/view-models-pocos-versus.html

    另一个支持答案:https://stackoverflow.com/a/783154/27669

相关问题