更新:对不起,我不清楚这个问题。我应该提到:
假设我无法更改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时如何引发属性更改事件?
我知道我可以删除继承并重新实现每个基本属性并引发事件,但是还有更好的方法吗?
更改您的代码,以便Base代替实现接口,并在设置Name时引发事件:
public class Base : INotifyPropertyChanged
{
private string _name;
public string Name { get
{
return _name;
}
set{
if(PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Some arg"));
_name = value;
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
“ Derived”将继承Base的接口实现,因此只需将其从类声明中删除:
public class Derived : Base
{
private string _derivedName;
public string DerivedName {
get { return _derivedName; }
set
{
_derivedName = value;
RaisePropertyChanged("DerivedName");
}
}
protected virtual void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句