使用DynamicData进行排序更新后处理的项目

时间:2019-05-22 09:47:18

标签: c# dynamic-data

我正在使用DynamicData(6.9.1.2588)转换项目然后对其进行排序。

yAxis: {
        title: {
            text: 'Temperature'
        },
        labels: {
            formatter: function () {
           return 'test' ;

            }
        }
    }

但是,当用于排序的属性发生更改时,dynamicdata会调用已转换项的Dispose(TableRow)。 即使删除DisposeMany,它也会这样做。

我没有传入TableRow构造函数,因此这些项被放置但保留在列表中。

这是dynamicdata的错误还是我的代码有误?

1 个答案:

答案 0 :(得分:0)

发现了问题。 这是通过DynamicData中的设计完成的,在此介绍了解决方法。 https://github.com/RolandPheasant/DynamicData/issues/19

在初始ToObservableChangeSet之后,我们必须添加

.AddKey(d => d.GetLocalId())

在转换之后,我们必须添加

.AsObservableCache()
.DisposeMany()
.Connect()

因此,仅当从链中较早的位置删除项目时,才会发生处置。不是当它们在链中稍后的排序中被删除/添加时。

最终代码如下:

ObservableCollectionEx.ToObservableChangeSet<ReactiveList<DataItem>, DataItem>(model.Children)
                .AddKey(d => d.GetLocalId())
                .Filter((d) => d.ViewClass == NormalizedType.TableRow)
                .Transform(d => new TableRow(d, this))
                .DisposeMany()
                .AsObservableCache()
                .Connect()
                .AutoRefresh(a => a.Index)
                .Sort(SortExpressionComparer<TableRow>.Ascending(a => a.Index))
                .ObserveOnDispatcher()
                .Bind(Rows)
             .Subscribe()