다음 내장 위임 고려 :C 번호 - 위임 전문
public delegate void MyPropertyChangedEventHandler(object sender,
MyPropertyChangedEventArgs e);
MyPropertyChangedEventArgs는 다음과 같이 선언 :이 서명에 대리자를 오버라이드 (override)// 과부하 확장하는 것을
public delegate void PropertyChangedEventHandler(object sender,
PropertyChangedEventArgs e);
그것을 가능을
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));
}
}
및 이벤트 가입은 어디에서나 PropertyChangedEventArgs 캐스팅 여전히 아웃 - 오브 - 박스 XAML은 속성에 바인딩을 잃지 입력 할 필요없이 MyPropertyChangedEventArgs 속성에 대한 액세스를 허용해야합니다.
예 유스 케이스 : 다음 contravariance 확실히 클라이언트 코드가 "확장"을 PropertyChanged
를 구독 할 수 있도록 위임
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