ReactiveList.AddRange (IEnumerable< T>集合)为集合中的每个项目触发

本文关键字:集合 项目 AddRange IEnumerable ReactiveList | 更新日期: 2023-09-27 18:14:34

使用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 times
myReactiveList.AddRange(aList);

问题:这是预期的行为吗?如果是这样,我应该做些什么来订阅,以便我的观察者只在添加集合(AddRange(..))时得到一次通知?

编辑:设置myReactiveList.ResetChangeThreshold = 0;成功了。

编辑2:实际上有这个文档(和其他反应的东西),只是埋在ReactiveUI的docs分支,并在该分支的docs文件夹:ReactiveList

因此,为了实现我最初想要的,我将这样做:

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

ReactiveList.AddRange (IEnumerable< T>集合)为集合中的每个项目触发

这由ResetChangeThreshold属性控制。默认情况下,只有在AddRange中添加超过10项时才会触发更改抑制,新条目的数量为原始条目的30%。