C# 在使用DynamicATA进行排序更新后处理的项

C# 在使用DynamicATA进行排序更新后处理的项,c#,dynamic-data,C#,Dynamic Data,我正在使用DynamicATA(6.9.1.2588)转换项目,然后对其进行排序 ObservableCollectionEx.ToObservableChangeSet<ReactiveList<DataItem>, DataItem>(model.Children) .Filter((d) => d.ViewClass == NormalizedType.TableRow) .Transform(d

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

ObservableCollectionEx.ToObservableChangeSet<ReactiveList<DataItem>, DataItem>(model.Children)
                .Filter((d) => d.ViewClass == NormalizedType.TableRow)
                .Transform(d => new TableRow(d, this))
                .AutoRefresh(a => a.Index)
                .Sort(SortExpressionComparer<TableRow>.Ascending(a => a.Index))
                .ObserveOnDispatcher()
                .Bind(Rows)
             .DisposeMany()
             .Subscribe()
ObservableCollectionEx.ToObservableChangeSet(model.Children)
.Filter((d)=>d.ViewClass==NormalizedType.TableRow)
.Transform(d=>newtableRow(d,this))
.AutoRefresh(a=>a.Index)
.Sort(SortExpressionComparer.Ascending(a=>a.Index))
.ObserveOnDispatcher()
.Bind(行)
.DisposeMany()
.Subscribe()
但是,当用于排序的属性发生更改时,dynamicata调用Dispose处理转换的项(TableRow)。 即使我移除了处理器,它也会这样做

我没有传入TableRow构造函数,因此项目被释放,但保留在列表中

这是dynamicdata的错误还是我在代码中犯了错误?

发现了问题。 这是在DynamicData中通过设计完成的,这里介绍了解决方法。

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

.AddKey(d => d.GetLocalId())
.AsObservableCache()
.DisposeMany()
.Connect()
在转换之后,我们必须添加

.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()
ObservableCollectionEx.ToObservableChangeSet(model.Children)
.AddKey(d=>d.GetLocalId())
.Filter((d)=>d.ViewClass==NormalizedType.TableRow)
.Transform(d=>newtableRow(d,this))
.DisposeMany()
.AsObservableCache()
.Connect()
.AutoRefresh(a=>a.Index)
.Sort(SortExpressionComparer.Ascending(a=>a.Index))
.ObserveOnDispatcher()
.Bind(行)
.Subscribe()