使用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);
}
答案 0 :(得分:3)
这由ResetChangeThreshold
属性控制。默认情况下,更改抑制只会在AddRange
中触发,如果您添加的项目数超过10项且,则新项目的数量为原始项目的30%。有关详细信息,请参阅the source。