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

时间:2014-07-23 23:44:04

标签: c# reactiveui

使用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);
}

1 个答案:

答案 0 :(得分:3)

这由ResetChangeThreshold属性控制。默认情况下,更改抑制只会在AddRange中触发,如果您添加的项目数超过10项,则新项目的数量为原始项目的30%。有关详细信息,请参阅the source