列表中的每个项都实现了ReactiveObject,所以我尝试过使用项。WhenAnyValue((.Subscribe((,然后再将其添加到SourceList中。虽然这很有效,但它的性能很差,对于我的40000个项目的SourceList来说并不实用。是否有任何方法可以观察SourceList一次列表中任何项目的属性更改?
DynamicData为IObservable<IChangeSet<T>>
提供了几个扩展,您可以使用这些扩展绑定到SourceList
中的所有项。所有这些都将优雅地处理列表中添加/删除的项目。
WhenValueChanged
这基本上相当于WhenAnyValue
,但对于列表来说,这可能是您想要的。当目标属性发生更改时(可选地,在初始化时(,这将返回值的可观察值。示例:
sourceList
.Connect()
.WhenValueChanged(item => item.property)
.Subscribe(newPropertyValue => { /* Do stuff */ }
WhenPropertyChanged
与ObservableForProperty
类似,当目标属性及其父对象发生更改时(可选地在初始化时(,它将返回目标属性及其母对象的值的可观察值。示例:
sourceList
.Connect()
.WhenPropertyChanged(item => item.property)
.Subscribe(change => { /* Do stuff with change.Sender and change.Value */ }
MergeMany
最通用的选项MergeMany
允许您组合从每个列表项中创建或检索的可观察性。例如,要完成类似于WhenValueChanged
的任务,可以执行以下操作:
sourceList
.Connect()
.MergeMany(item => item.WhenAnyValue(x => x.property))
.Subscribe(newPropertyValue => { /* Do stuff */ }