Skip to content

Commit 91b82a3

Browse files
authored
Fixes issue where expanding or children are dynamic (#3380)
1 parent 3d56741 commit 91b82a3

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

MaterialDesignThemes.Wpf/TreeListView.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ internal void ItemsChildrenChanged(TreeListViewItem item, NotifyCollectionChange
138138
break;
139139
case NotifyCollectionChangedAction.Move:
140140
int adjustedOldIndex = index + e.OldStartingIndex + GetChildrenAndGrandChildrenCountOfPriorSiblings(itemsSource, index, e.OldStartingIndex);
141-
141+
142142
int additionalOffset = 0;
143143
if (e.OldStartingIndex < e.NewStartingIndex)
144144
{

MaterialDesignThemes.Wpf/TreeListViewItem.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,14 +101,21 @@ private void OnChildrenChanged(NotifyCollectionChangedEventArgs e)
101101

102102
internal void PrepareTreeListViewItem(object? item, TreeListView treeListView, int level, bool isExpanded)
103103
{
104-
if (GetTemplate() is HierarchicalDataTemplate { ItemsSource: { } itemsSourceBinding })
105-
{
106-
SetBinding(ChildrenProperty, itemsSourceBinding);
107-
}
108-
IsExpanded = isExpanded;
109104
Level = level;
110105
TreeListView = treeListView;
111106

107+
//NB: This can occur as part of TreeListView.PrepareContainerForItemOverride
108+
//Because this can trigger additional collection changes we enqueue the operation
109+
//to occur after the current operation has completed.
110+
Dispatcher.BeginInvoke(() =>
111+
{
112+
if (GetTemplate() is HierarchicalDataTemplate { ItemsSource: { } itemsSourceBinding })
113+
{
114+
SetBinding(ChildrenProperty, itemsSourceBinding);
115+
}
116+
IsExpanded = isExpanded;
117+
});
118+
112119
DataTemplate? GetTemplate()
113120
{
114121
return ContentTemplate ??
@@ -134,7 +141,7 @@ void OnTemplateChanged(object? sender, EventArgs e)
134141
}
135142
}
136143

137-
internal void ClearTreeListViewItem(object item, TreeListView treeListView)
144+
internal void ClearTreeListViewItem(object _, TreeListView __)
138145
{
139146
if (Children is INotifyCollectionChanged collectionChanged)
140147
{

0 commit comments

Comments
 (0)