关于在模型中是否应实现INotifyPropertyChanged
似乎存在矛盾的想法。我认为应该在ViewModel中实现它,但是我不知道如何实现。在stackoverlow.com(In MVVM model should the model implement INotifyPropertyChanged interface?,In MVVM should the ViewModel or Model implement INotifyPropertyChanged?)上都多次提到相同的想法,但是我找不到任何示例来说明如何实现。
举例来说,假设我有一个人物模型:
Public Person {
public int Age { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public void NameChange( string newName );
}
如何实现ViewModel,以便识别
Age
,FirstName
或LastName
中的所有更改?Public PersonViewModel : INotifyPropertyChanged {
Person _person;
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string propertyName) {
if(this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
//ctor, Properties, etc...
}
编辑-澄清:
因此,而不更改Person模型,我如何修改ViewModel以获得更新通知?
那有可能吗?如果不是,那么那些订阅“模型中的INPC是baaaad”的人如何收到模型更改的通知?
最佳答案
有趣的问题。我已经阅读了MVVM一年多了,但我仍然不确定。
例如,如果您的应用程序表示流程的状态,并且在内部修改了该状态而无需用户进行任何交互,则您的模型需要能够通知您的 View 模型它已更改。
因此,如果您的模型实现INotifyPropertyChanged,并且您的 View 模型仅将相同的信息传递给 View ,那么...您的 View 模型真的需要存在吗?
在我们公司中,我们考虑两种主要情况:
也许我错过了有关MVVM的观点,但是根据我的经验,这并不是您绝对必须始终遵循的模式。这是开发WPF应用程序的一种非常好的思考方式,但是在我看来,为每个 View 创建ViewModels似乎是一大开销。
你们所有人对这种方式有何看法?
最好的祝福,
安托万
编辑31.03.2012
我发现了一篇非常有趣的文章,解释了如何在viewmodel中处理模型属性,而不必在viewModel中为每个模型属性实现代理属性。
此外,作者还说了一些有关在模型中实现INPC的观点,以及对模型进行监听的话。
我认为这是到目前为止我阅读的有关MVVM的最实用的文章。
一探究竟 :
http://msdn.microsoft.com/en-us/magazine/ff798279.aspx
关于c# - 当模型中的属性更改时得到通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9931323/