在给定标准视图模型的情况下,当属性发生更改时,有没有办法确定更改的发起者?换句话说,在以下视图模型中,我希望“PropertyChanged”事件的“sender”参数是实际调用Prop1
setter的对象:
public class ViewModel : INotifyPropertyChanged
{
public double Prop1
{
get { return _prop1; }
set
{
if (_prop1 == value)
return;
_prop1 = value;
// here, can I determine the sender?
RaisePropertyChanged(propertyName: "Prop1", sender: this);
}
}
private double _prop1;
// TODO implement INotifyPropertyChanged
}
另外,是否可以将 CallerMemberNameAttribute
应用于属性 setter 方法?
sender
应该是拥有事件的实例... 但这并不是必须的,对吗?或者你是在说 WPF/Silverlight 绑定使用sender
参数来检索更新后的值? - McGarnagleNotifyPropertyChanged
事件的对象如何知道哪个对象引发了该事件?如果一个对象在两个不同的对象上注册NotifyPropertyChanged
,会怎么样? - shf301sender
是其他对象,WPF绑定仍然有效。 可能订阅对象/绑定保持对源对象的引用,而不依赖于sender
。 - McGarnagleINotifyPropertyChanged
。我并不是期望您的想法会出问题,但如果出现问题,责任完全在您身上,并且有可能在尚不存在的.NET 5、第三方控件、属性转发器、许多其他帮助程序类上出现问题,所有这些都连接到PropertyChanged
。 - user743382