关于ZAKER 融媒体解决方案 合作 加入

C#- 为集合中的每个项目触发 ReactiveList.AddRange ( IEnumerable collection )

CocoaChina 11-22

使用 ReactiveUI 6.0.0 并具有

var myReactiveList = new ReactiveList<SomeType> ( ) ;// [ ... ] later I subscribe to the list:myReactiveList.Changed.Subsribe ( _ => { // this will be invoked 10 times, once for each item // in "myList" added through AddRange ( ... ) below // eg. count will increase from 1 to 10 on each call var test = myReactiveList.ToList ( ) ; int count = test.Count;} ) ;// Now I add a couple of items at once // ( eg. aList is a List<SomeType> with say 10 items ) // This will fire 10 timesmyReactiveList.AddRange ( aList ) ;

问题:这是预期的行为吗?如果是这样 , 我应该怎么做才能进行订阅 , 这样 , 如果添加了集合 ( AddRange ( .. ) ) , 我的观察者仅会收到一次通知?

编辑:设置 myReactiveList.ResetChangeThreshold = 0; 做到了 .

编辑 2:实际上有关于此 ( 和其他反应性内容 ) 的文档 , 仅埋在 ReactiveUI 的 docs 分支中 , 以及该分支的 docs 文件夹中:ReactiveList

因此 , 为了达到我最初想要的目的 , 我会这样做:

using ( myReactiveList.SuppressChangeNotifications ( ) ) { myReactiveList.AddRange ( aList ) ;}

最佳答案

这由 ResetChangeThreshold 属性控制 . 默认情况下 , 仅当您添加 10 个以上的项目并且新项目的数量是原始项目的 30%时 , 才会在 AddRange 中触发更改抑制 . 有关详细信息 , 请参见the source.

以上内容由"CocoaChina"上传发布 查看原文
相关标签 观察者

觉得文章不错,微信扫描分享好友

扫码分享