我需要订阅列表中对象的属性。我找到了这个例子 (https://dev59.com/rXbZa4cB1Zd3GeqPJLyE#18770397),它很完美地工作,但如果我向列表中添加一个新元素,它就无法正常工作。有什么解决方案吗?谢谢!
编辑
IDisposable subscription =
Observable
.FromEventPattern
<NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs>(
x => MyList.CollectionChanged += x,
x => MyList.CollectionChanged -= x)
.Where(x => x.EventArgs.Action == NotifyCollectionChangedAction.Add)
.SelectMany(x => x.EventArgs.NewItems.Cast<MyCustomClass>())
.SelectMany(x =>
{
CallMethodWhenAddItem(x);
return x.OnPropertyChange(nameof(x.MyCustomProperty));
})
.Subscribe(x =>
// x is PropertyChangedEventArgs, not MyCustomClass
if (x.MyCustomProperty == "SomeValue") {
RunAction();
}
});
public static IObservable<PropertyChangedEventArgs> OnPropertyChange<T>(this T currentSource, string propertyName)
where T : INotifyPropertyChanged
{
return
Observable
.FromEventPattern
<PropertyChangedEventHandler, PropertyChangedEventArgs>(
eventHandler => eventHandler.Invoke,
x => currentSource.PropertyChanged += x,
x => currentSource.PropertyChanged -= x)
.Where(x => x.EventArgs.PropertyName == propertyName)
.Select(x => x.EventArgs);
}
您能否对以下问题提供一些指导?
1) 使用"eventHandler => eventHandler.Invoke"和不使用它有什么区别。互联网上的许多示例使用它,而其他示例则不使用它。我真的看不出有什么区别。
2) 如何取消订阅动态添加的属性。只需要从列表中删除它吗?
谢谢!
OnPropertyChange
的返回类型并在查询中添加.Where
子句,对吗? - Enigmativity