Рассмотрим следующий встроенный делегат: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