diff --git a/src/Avalonia.Controls.TreeDataGrid/Primitives/TreeDataGridPresenterBase.cs b/src/Avalonia.Controls.TreeDataGrid/Primitives/TreeDataGridPresenterBase.cs index 11e88c52..a747c556 100644 --- a/src/Avalonia.Controls.TreeDataGrid/Primitives/TreeDataGridPresenterBase.cs +++ b/src/Avalonia.Controls.TreeDataGrid/Primitives/TreeDataGridPresenterBase.cs @@ -728,7 +728,15 @@ void ClearFocusedElement(int index, int count) ClearFocusedElement(e.OldStartingIndex, e.OldItems!.Count); break; case NotifyCollectionChangedAction.Replace: - _realizedElements.ItemsReplaced(e.OldStartingIndex, e.OldItems!.Count, _recycleElementOnItemRemoved); + if (e.OldItems!.Count == e.NewItems!.Count) + { + _realizedElements.ItemsReplaced(e.OldStartingIndex, e.OldItems!.Count, _recycleElementOnItemRemoved); + } + else + { + _realizedElements.ItemsRemoved(e.OldStartingIndex, e.OldItems!.Count, _updateElementIndex, _recycleElementOnItemRemoved); + _realizedElements.ItemsInserted(e.NewStartingIndex, e.NewItems!.Count, _updateElementIndex); + } ClearFocusedElement(e.OldStartingIndex, e.OldItems!.Count); break; case NotifyCollectionChangedAction.Move: