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

标签 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: 实际上有这个(和其他 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/

相关文章:

c# - 当从 C# 中的动态获取属性时,如何检查枚举属性?

c# - 查找未处理的异常 - .NET

windows-phone-7 - 响应式(Reactive) UI 样本

mvvm - ReactiveUI.Routing 对 Splat 的依赖

c# - 使用非单向方法的 WCF 中的竞争条件

c# - 如何验证 Moq 中的对象类型参数

ReactiveUI:如何正确地将参数传递给 ReactiveCommand.CreateFromTask

c# - 如何在 ReactiveUI、C# 中将一系列可观察对象动态合并为一个可观察对象

c# - 如何使用 asp.net 在 twitter API 上获取用户信息

wpf - 使用 ReactiveUI ViewModels 将不同对象的动态集合绑定(bind)到 WPF 数据网格