我有一个扩展方法来订阅PropertyChanged
实现的对象的事件INotifyPropertyChanged
。
我希望事件只触发一次。不多。
这是我的方法。
public static void OnPropertyChanged<T>(this INotifyPropertyChanged target, string propertyName, Action action)
{
if (target == null)
{
return;
}
PropertyChangedEventHandler handler = (obj, e) =>
{
if (propertyName == e.PropertyName)
{
action();
}
};
target.PropertyChanged -= handler;
target.PropertyChanged += handler;
}
但它不起作用。我无法删除事件处理程序,因此每次调用此方法时都会触发事件。
我尝试了不同的方法。而不是使用匿名方法,而是使用更传统的方法,例如:
public static void OnPropertyChanged<T>(this INotifyPropertyChanged target, string propertyName, Action action)
{
if (target == null)
{
return;
}
target.PropertyChanged -= target_PropertyChanged;
target.PropertyChanged += target_PropertyChanged;
}
static void target_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
//do stuff here
}
它工作正常。该事件只触发一次,但我还需要 Action 参数。我不能用这种方法使用它。
任何解决方法或不同的方法来解决这个问题?静态方法中的匿名方法有什么奇怪的吗?
提前致谢。