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);
}
这由ResetChangeThreshold
属性控制。默认情况下,只有在AddRange
中添加超过10项和时才会触发更改抑制,新条目的数量为原始条目的30%。