在带有实体框架的ViewModel上使用DependencyProperty



我正在用C#编写一个桌面应用程序,使用带有实体框架模型的MVVM模式。我倾向于在我的VM中使用DependencyProperty,并且(通常)更喜欢这个系统,而不是实现INotifyPropertyChanged。我希望事情保持一致。我的虚拟机访问模型中的实体,并且我设法将事情保持得非常独立——除了绑定和命令名之外,视图对虚拟机一无所知,而模型对虚拟机也一无所知。

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

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

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

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

因此,问题是这些方法中的一种还是另一种是我应该做事的方式?在这种情况下,我应该使用DependencyProperty还是INotifyPropertyChanged?需要指出的一点是,这可能是一个非常大规模的项目(使用插件和来自不同机器的大量数据库访问),所有东西都应该尽可能地可重复使用,模块也应该尽可能"断开连接"。

我建议使用INotifyPropertyChanged而不是DependencyProperty。我在ViewModels中远离DependencyProperty的主要原因是DependencyProperties位于WindowsBase.dll中。这将您与Windows UI联系得太多了(至少是IMHO)。

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

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

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

相关内容

  • 没有找到相关文章

最新更新