使用ReactiveUI/DynamicData,如何观察SourceList中项目属性的更改



列表中的每个项都实现了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 */ }

最新更新