我目前正在学习MVVM,我不明白RaisePropertyChanged
是如何重要的
例如这个函数:
public City SelectedCity
{
get
{
return selectedcity;
}
set
{
RaisePropertyChanging(SelectedCityLocationPropertyName);
selectedtrend = value;
RaisePropertyChanged(SelectedCityLocationPropertyName);
MessageBox.Show(City.Name);
}
}
和这一个:
public City SelectedCity
{
get
{
return selectedcity;
}
set
{
// RaisePropertyChanging(SelectedCityLocationPropertyName);
selectedtrend = value;
// RaisePropertyChanged(SelectedCityLocationPropertyName);
MessageBox.Show(City.Name);
}
}
给我完全相同的结果。你能否告诉我为什么RaisePropertyChanged如此重要并给我一个例子来说明它会产生重大影响?
答案 0 :(得分:7)
阅读本文:
http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx
RaisePropertyChanging事件用于通知UI或绑定元素数据已更改。例如,TextBox需要在基础数据更改时接收通知,以便它可以更新您在UI中看到的文本。如果没有NotifyPropertyChanged事件,TextBox将不知道数据已更改。
这在MVVM中非常重要。
答案 1 :(得分:2)
RaisePropertyChange
是指示属性状态发生变化的事件,指向订阅该类的人。如果你看一下MVVM灯中的基类,你会发现它遵守INotifyPropertyChanged
。
当属性通知订户更改时(很可能是Xaml中的绑定),事件的使用者知道用新数据更新控件。这允许视图异步更新,而不必直接更新任何绑定控件。
请参阅我对MVVM update of calculated properties的回答,了解可以使用INotifyPropertyChange
推送更新的示例。
同样在我的博客上,我讨论了MVVM绑定(MVVM光只是一个包装器)Xaml: ViewModel Main Page Instantiation and Loading Strategy for Easier Binding.,它可以告诉你如何在没有MVVM光辅助包装器的情况下完成它。
答案 2 :(得分:1)
WPF绑定机制依赖于每个 FrameworkElement 的 DataContext 提升 PropertyChanged 事件,以便它的依赖属性,以便对它们所绑定的普通CLR属性的值进行采样。
依赖属性< - 绑定 - >普通CLR财产
加载时,每个FrameworkElement的依赖项属性都将从绑定的CLR属性中获得值。
Binding引擎侦听PropertyChanged事件, 引发时,它会找到绑定CLR属性的相应依赖项属性(属性),该属性在事件args中给出,并从中更新它们的值(此时您将到达CLR属性的getter)。