Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 属性更改方法赋值_C#_Inotifypropertychanged - Fatal编程技术网

C# 属性更改方法赋值

C# 属性更改方法赋值,c#,inotifypropertychanged,C#,Inotifypropertychanged,我已经为一个简单的WPF视图模型实现了INotifyPropertyChanged接口,当我调用 protected void RaisePropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } 关于GoodText的集状 this.

我已经为一个简单的WPF视图模型实现了INotifyPropertyChanged接口,当我调用

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();