对于是否INotifyPropertyChanged
是否应该在模型中实现。我认为它应该在 ViewModel 中实现,但我不知道它是如何实现的。 stackoverlow.com 上到处都提到了同样的想法(在 MVVM 模型中,模型应该实现 INotifyPropertyChanged 接口吗? https://stackoverflow.com/questions/6922130/in-mvvm-model-should-the-model-implement-inotifypropertychanged-interface, 在 MVVM 中,ViewModel 或 Model 应该实现 INotifyPropertyChanged 吗? https://stackoverflow.com/questions/772214/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
, or 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...
}
编辑-澄清:
So 不改变 Person 模型如何修改 ViewModel 以获取更新通知?
这可能吗?如果不是,那些订阅模型中“INPC”的人怎么样?baaaad“收到模型变更通知吗?
ViewModel 绝对应该实现 INotifyPropertyChanged。对于是否也应该在模型中实现它,我没有强烈的意见。我认为当模型属性在绑定到视图时不独立于 ViewModel 进行更改时,您不需要它。
无论如何,这就是我在 ViewModel 中实现 INotifyPropertyChanged(当它尚未在模型中实现时)的方式:
public class PersonViewModel : INotifyPropertyChanged
{
private Person person;
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if(PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public PersonViewModel(Person person)
{
this.person = person;
}
public int Age
{
get { return person.Age; }
set
{
if (value != person.Age)
{
person.Age = value;
OnPropertyChanged("Age");
}
}
}
public string FirstName
{
get { return person.FirstName; }
set
{
if (value != person.FirstName)
{
person.FirstName = value;
OnPropertyChanged("FirstName");
}
}
}
public string LastName
{
get { return person.LastName; }
set
{
if (value != person.LastName)
{
person.LastName = value;
OnPropertyChanged("LastName");
}
}
}
}
看到您如何更新您的问题,我需要补充一点,如果没有在模型中实现 INotifyPropertyChanged (或类似的自定义通知事件),您将无法获得有关独立于 ViewModel 的模型中发生的更改的通知。我想你应该能够避免这种情况。否则只需在其中实现 INotifyPropertyChanged 即可。如果你需要的话,这没什么问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)