C# 在使用DynamicATA进行排序更新后处理的项
我正在使用DynamicATA(6.9.1.2588)转换项目,然后对其进行排序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
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()