[英]PropertyChanged on base class without INotifyPropertyChanged
[英]Base class implements INotifyPropertyChanged : can derived types use its PropertyChanged event?
編輯
從海報提示中,我在MSDN上找到了以下有用的鏈接:
在重構時,我遇到了一個有趣的問題,到目前為止我還沒有找到答案:
重構包括創建一個實現INotifyPropertyChanged
的abstract
基類,派生類型將使用它而不是實現接口本身。
派生類型可以使用基類事件PropertyChanged
還是必須按如下所示覆蓋它?
如果他們必須override
它,您能解釋為什么要這樣做嗎?
(注意:重構由Resharper建議)
public abstract class BaseDTO : INotifyPropertyChanged
{
public virtual event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public class ReviewDTO : BaseDTO
{
private ImageSource _image;
private string _summary;
private string _url;
public string Url
{
get { return _url; }
set
{
if (value == _url) return;
_url = value;
OnPropertyChanged();
}
}
public string Summary
{
get { return _summary; }
set
{
if (value == _summary) return;
_summary = value;
OnPropertyChanged();
}
}
public ImageSource Image
{
get { return _image; }
set
{
if (Equals(value, _image)) return;
_image = value;
OnPropertyChanged();
}
}
public override event PropertyChangedEventHandler PropertyChanged;
}
我不認為他們必須優先。
基本類型可以定義
受保護的void RaisePropertyChanged(string propertyName);
派生的類可以調用基本方法來觸發屬性通知。
剛剛找到了一些支持證據: 有關實現INotifyPropertyChanged的MSDN頁面
當然,您的基本類型可以添加更多的東西
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.