You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ReactiveUI/DynamicData如何监听SourceList内元素的属性变化

解决方案

你可以直接使用DynamicData针对SourceList提供的WhenPropertyChanged扩展方法,仅需一次订阅就能追踪列表内所有实现了ReactiveObject的元素的指定属性变化。该方法内部会自动处理元素的添加/移除生命周期,自动挂载/销毁对应的属性监听,不会残留订阅泄漏,性能远优于手动给每个元素单独订阅的方案。

示例代码

首先确保你已经引用了DynamicData.ReactiveUI命名空间,基础用法如下:

// 假设SourceList的元素类型为MyItem,需要监听的属性名为TargetProperty
sourceList.Connect()
    .WhenPropertyChanged(x => x.TargetProperty)
    .Subscribe(change => 
    {
        // change.Sender 为属性发生变更的元素实例
        // change.Value 为属性变更后的最新值
        // 此处编写你的业务逻辑即可
    })
    // 请将订阅加入你的Disposable容器管理生命周期
    .DisposeWith(yourDisposableContainer);

性能优化注意点

  • 若不需要获取属性的初始值,可在调用WhenPropertyChanged时传入notifyOnInitialValue: false参数,跳过初始值推送,大幅降低4万级元素场景下的冗余通知开销
  • 若需监听多个属性,可链式调用多个WhenPropertyChanged方法;若需监听元素的所有属性变更,可直接使用WhenAnyPropertyChanged扩展

注意:如果你的元素会频繁在SourceList中添加、移除,该方法会自动处理订阅的释放,不需要手动管理每个元素的订阅生命周期,可完全避免内存泄漏问题。


内容的提问来源于stack exchange,提问作者dregan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 15:27:01