C# 属性更改方法赋值
我已经为一个简单的WPF视图模型实现了INotifyPropertyChanged接口,当我调用C# 属性更改方法赋值,c#,inotifypropertychanged,C#,Inotifypropertychanged,我已经为一个简单的WPF视图模型实现了INotifyPropertyChanged接口,当我调用 protected void RaisePropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } 关于GoodText的集状 this.
protected void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
关于GoodText的集状
this.RaisePropertyChanged("GoodText");
PropertyChanged事件有一个我从未分配给它的方法
什么时候分配的?是谁干的
编辑:
谢谢你们,很好的建议,但我想威廉的答案正是我想要的,我的意思是:当我说
<Button Content="Button" Command="{Binding CheckButtonCommand}" />
??
因此绑定将处理程序添加到PropertyChanged事件中?这就是“类字段事件”的魔力和委托的魔力
首先,类似字段的事件:对于外部调用者,它们看起来像一个事件
——带有添加
/删除
访问器;它们只能与+=
/-=
一起使用。但是,对于声明类型,它们看起来更像一个字段——因此您可以直接访问委托。包括读取和赋值
至于这个方法是从哪里来的。这就是(某种程度上的)委托。这实际上是在委托实例上调用(…);但是.Invoke
是隐式的。任何委托都会发生这种情况,例如:
Action<string> action = s => Console.WriteLine(s);
// following are identical (but with different values, obviously)
action("hello");
action.Invoke("world");
2:使用最新的编译器,您可以避免使用文字:
protected void RaisePropertyChanged([CallerMemberName] string propertyName=null)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
它允许您从GoodText
属性调用它,简单如下:
this.RaisePropertyChanged();
代码更少=出错的事情更少(复制/粘贴名称等)最有可能的是,属性(以及类)是以XAML(或通过代码)绑定的数据
如果绑定到实现INotifyPropertyChanged的类,则绑定到源类的UIElement将连接一个事件处理程序,以便能够监视属性更改。正确。绑定添加了处理程序,因此可以通知它更新,并相应地执行操作。这就是MVVM绑定的工作方式。绑定的对象只需要知道INotifyPropertyChanged即可获得更新通知(和/或INotifyCollectionChanged用于集合更新)。
protected void RaisePropertyChanged([CallerMemberName] string propertyName=null)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
this.RaisePropertyChanged();