从IReactiveDerivedList移至DynamicData

问题描述 投票:0回答:1

在旧版本的ReactiveUI中具有简单的代码:

var allItems = new ObservableCollection<Model>(items);
var filteredItems = allItems.CreateDerivedCollection(
 x => x,
 Filter,
 Comparer.Compare);

其中FilterCompare具有简单签名:

private bool Filter(Model item)
public int Compare(Model x, Model y)

有时我更改其他线程中的项目(较大更改,不使用INPC)或更改Filter \ Compare策略,然后执行filteredItems.Reset();


在DynamicData中,我尝试:

          ReadOnlyObservableCollection<Model> filteredItems;
          var allItems = new ObservableCollection<Model>(items);
          var cancellation = allItems
            .ToObservableChangeSet()
            .Filter(Filter)
            .Sort(Comparer)
            .ObserveOn(SynchronizationContext.Current)
            .Bind(out filteredItems)
            .DisposeMany()
            .Subscribe();

但未找到,如何Reset此^或filteredItems

dynamic-data reactiveui
1个回答
0
投票

希望我能够给您直接的答案,但是我对ReactiveUI还是陌生的。设法将DynamicData用于某些用途,并认为您不介意这种共享。

如果我稍后说的话对您没有帮助,这是我可以找到的最相关的资源:


就我而言,我使用SourceListSourceCache作为类似于allItems的内容的类型。

SourceCache<Model, string> allItems =
    new SourceCache<Model, string>(m => m.Id);

// assuming each model has unique id; if it doesn't then use SourceList

然后我将BindingList<Model>作为类型类似于您的'filteredItems'。

BindingList<Model> filteredItems = new BindingList<Model>();

绑定应该类似于:

allItems
    .Connect()
    ...
    .ObserveOn(...)
    .Bind(filteredItems)
    .Subscribe();

要批量编辑列表,我称呼类似

allItems.Edit(
    innerList => {
    innerList.Clear();

    // edit
    // innerList.AddOrUpdate(...);
});

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.