我正在使用带有实体框架模型的 MVVM 模式在 C# 中编写桌面应用程序。我倾向于在我的 VM 中使用 DependencyProperties,并且(通常)更喜欢这个系统而不是实现 INotifyPropertyChanged。我想保持一致。我的虚拟机访问模型中的实体,并且我设法将事情分开 - 除了绑定和命令名称之外,视图对虚拟机一无所知,而模型对虚拟机有知识。
在 VM 中使用 INotifyPropertyChanged,更新模型中的实体似乎很容易:
public string Forename
{
get { return CurrentPerson.Forename; }
set
{
if (Forename != value)
{
CurrentPerson.Forename = value;
NotifyPropertyChanged("Forename");
}
}
}
...其中 CurrentPerson 是由实体数据模型自动创建的 Person 对象。因此,没有专门为存储名字而创建的私有字段。
使用 DependencyProperties,看来我必须创建一个 DP,使用 GetValue 和 Setvalue 添加默认属性,然后使用 PropertyChangedCallback 来更新 CurrentPerson 实体。为了与我的其他 VM 保持一致,在这种情况下调用回调似乎会增加开销。
因此,问题是这些方法中的一种或另一种是我应该做事的方式吗?在这种情况下,我应该使用 DependencyProperty 还是 INotifyPropertyChanged?应该指出的一件事是,这可能是一个非常大规模的项目(带有插件和来自不同机器的大量数据库访问),并且所有东西都应该是可重用的,并且模块尽可能“断开连接” .