【发布时间】:2020-11-12 01:57:13
【问题描述】:
在 Xamarin.Forms 上,我实现了 INotifyPropertyChanged,它工作正常。
虽然有一些我不明白的地方: PropertyChanged 是一个事件,这意味着它是一个委托。 在我们调用 event/delegate 之前,我们需要它们指向某个 function/eventHundler。
怎么回事,我们在这里声明了一个事件,我们没有将它设置为指向 任何功能,一切正常!怎么不为空,虽然我们从来没有初始化过。
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
var changed = PropertyChanged;
if (changed == null) //It seems for me, this should be null for ever.
return;
changed.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
【问题讨论】:
-
如果有任何PropertyChanged事件的监听器,它不会为空。如果您使用此类进行数据绑定,则 UI 将自动订阅该事件。
-
@Sinatr 就是这样。我没有为这个活动订阅任何人。这就是我除了 this 将始终为空的原因。
-
@S Itzik...您没有订阅它...是的...但是控件订阅了它。这就是绑定的工作原理。
-
PropertyChanged事件很特别。 bindings 在内部使用它。如果绑定具有(取决于BindingMode)来监视源更改,那么在运行时它会尝试解决它可以使用哪些机制来实现这一点。如果它发现源实现了INotifyPropertyChanged,那么它将订阅PropertyChanged事件。所以在运行时它不会是null。在某些时候绑定会取消订阅,所以它会是null。
标签: c# events xamarin.forms inotifypropertychanged eventhandler