【发布时间】:2015-07-10 20:14:26
【问题描述】:
更新: 对不起,我不清楚这个问题。我应该提到:
假设我无法更改 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 时,您是要拦截对该 Base 属性(名称)的更改,还是它只是代表您要拦截的许多属性。
-
@DWright 谢谢。我应该特别说我不能修改基础。基础(以及派生)实现了一个名为 IData 的接口,其中包含许多属性(名称只是其中之一)。
-
彼得,谢谢,这澄清了。将更新我的答案。
-
你不能。如果您无法修改 Base 并且无法覆盖该属性,则无法更改其行为。你能做的最好的事情是围绕 Base 创建一个包装类,并针对它创建一个代码消费类。