Элемент удаляется после обновления сортировки с помощью DynamicData - PullRequest
0 голосов
/ 22 мая 2019

Я использую DynamicData (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()

Но когда свойство, используемое для сортировки, изменяется, динамические данные вызывают Dispose для преобразованных элементов (TableRow).Он делает это, даже если я удаляю DisposeMany.

Я не передаю конструктор TableRow, поэтому элементы располагаются, но остаются в списке.

Это ошибка динамических данных илиЯ сделал ошибку в коде?

1 Ответ

0 голосов
/ 23 мая 2019

Нашел проблему.Это сделано специально в 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()
...