考虑以下内置委托:C# - 委托专业化
public delegate void PropertyChangedEventHandler(object sender,
PropertyChangedEventArgs e);
难道我谨向/过载/重写委托给这个签名:
public delegate void MyPropertyChangedEventHandler(object sender,
MyPropertyChangedEventArgs e);
其中MyPropertyChangedEventArgs被声明为
public class MyPropertyChangedEventArgs : PropertyChangedEventArgs
{
public readonly object OldValue;
public readonly object NewValue;
public MyPropertyChangedEventArgs(string propertyName, object
oldValue, object newValue) : base(propertyName)
{
OldValue = oldValue;
NewValue = newValue;
}
}
并且拥有该事件的类被声明为
using System;
using System.ComponentModel;
// missing delegate decleration
public class Bindable : INotifyPropertyChanged
{
public event MyPropertyChangedEventHandler PropertyChanged;
private object _property;
public object Property
{
get { return property; }
set
{
var oldValue = _property;
_property = value;
OnPropertyChanged("Property", oldValue, value);
}
}
protected void OnPropertyChanged(string name, object oldValue,
object newValue)
{
if (oldValue != newValue && PropertyChanged != null)
PropertyChanged(this, new MyPropertyChangedEventArgs(name,
oldValue, newValue));
}
}
和事件订阅应该允许访问MyPropertyChangedEventArgs性能,而无需键入到处投的PropertyChangedEventArgs,仍然没有失去外的现成的XAML绑定属性。
例用例:
Bindable bindable = new Bindable();
bindable.PropertyChanged += (sender, args) =>
{
if (args.OldValue != null)
{
// Do Something
}
};
这绝对是[XY问题](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。解释为什么你首先需要一个'MyPropertyChangedEventArgs'。 –
我需要额外的参数(OldValue/NewValue) – anragab