当我们实现INotifyPropertyChanged时,它会通知什么?
它是只通知视图(我怀疑它),还是每个具有名称的属性(可能会提供不必要的影响)。或者仅仅是存在于DataContext中的属性(由于模型中可能没有DataContext ),这是值得怀疑的。
有没有可能有这样的一个函数
public class Demo : BaseViewModel
{
public void UpdateAll()
{
//Update properties which do not exist in this class
OnPropertyChanged("NameFromClassA");
OnPropertyChanged("NameFromClassB");
OnPropertyChanged("AgeInClassA");
OnPropertyChanged("AgeInClassC");
}
}我试过了,但我不能让它起作用。输出窗口中没有绑定错误,也没有任何运行时/编译器问题。
发布于 2014-06-19 15:02:48
INotifyPropertyChanged接口用于通知客户端(通常是绑定客户端)属性值已更改。
OnPropertyChanged("NameFromClassA")通常在BaseViewModel Class中实现,相当于执行:
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs("NameFromClassA"));它告诉正在收听Demo Class的PropertyChanged事件的人,名为"NameFromClassA“的Property已经更改了值(您的示例是错误的,因为您的Class中没有这样的Property )。
DependencyProperties绑定到VM的Properties以更新自身是必需的,很少用于其他任何事情。
编辑:
Psoeudo-大致相当于绑定引擎在场景后面所做工作的代码:
ClassA myClassA;
string myPropertyBoundToNameOfClassA;
// somewhere after myClassA was initialized
myClassA.PropertyChanged += OnMyClassAPropertyChanged;
void MyClassAPropertyChanged(string name)
{
if (name == "NameFromClassA")
myPropertyBoundToNameOfClassA = myClassA.Name;
}发布于 2014-06-19 15:00:34
INotifyPropertyChanged接口用于通知客户端(通常是绑定客户端)属性值已更改。
例如,考虑具有名为FirstName的属性的Person对象。要提供通用属性更改通知,Person类型实现INotifyPropertyChanged接口,并在更改PropertyChanged事件时引发FirstName事件。
要使更改通知发生在绑定客户端和数据源之间的绑定中,绑定类型应该是:实现INotifyPropertyChanged接口(首选)。为绑定类型的每个属性提供一个更改事件。
有关示例程序,请检查以下代码:MSDN
https://stackoverflow.com/questions/24309677
复制相似问题