更新: 对不起,我不清楚这个问题。我应该提到:
假设我无法更改Base,并且..
Base中有许多属性。示例代码已简化。
这里我有一个通过网络反序列化的(基类)对象。
public class Base
{
public string Name { get; set; }
}
现在我希望在WPF应用程序上绑定它的属性,以便在派生类上实现INotifyPropertyChanged。
public class Derived : Base, INotifyPropertyChanged
{
private string _derivedName;
public string DerivedName {
get { return _derivedName; }
set
{
_derivedName = value;
RaisePropertyChanged("DerivedName");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
现在我的问题是:当Base.Name被更改时,如何引发属性更改事件?
我知道我可以删除继承并重新实现每个基本属性并引发事件,但还有更好的方法吗?
答案 0 :(得分:2)
创建new
修饰符以隐藏现实世界的基础并报告Name
的属性更改,例如:
public class Derived : Base, INotifyPropertyChanged
{
public new string Name
{
get { return base.Name; }
set { base.Name = value;
RaisePropertyChanged("Name");
}
}
}
请参阅MSDN:new Modifier C# Reference了解其原因。
我知道我可以删除继承并重新实现每个基础 财产和提高事件,但还有更好的方法吗?
否......在没有执行上面的修饰符的情况下,没有办法在基类中的setter上实现PropertyChange调用。