使用 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: 实际上有这个(和其他 react 性东西)的文档,只是埋在 ReactiveUI 的 docs
分支和 docs
该分支中的文件夹:ReactiveList
所以,为了实现我最初想要的,我会这样做:
using (myReactiveList.SuppressChangeNotifications()) {
myReactiveList.AddRange(aList);
}
最佳答案
这由 ResetChangeThreshold
属性控制。默认情况下,只有当您添加超过 10 个项目并且新项目的数量是原始项目的 30% 时,才会在 AddRange
中触发更改抑制。有关详细信息,请参阅 the source .
关于c# - ReactiveList.AddRange(IEnumerable<T> collection) 为集合中的每个项目触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24922878/