Skip to content

Commit bf8e24b

Browse files
authored
Allow ICollectionView for nested TreeListViewItems (#3358)
This requires supported non-generic IEnumerable
1 parent dc37697 commit bf8e24b

File tree

3 files changed

+14
-8
lines changed

3 files changed

+14
-8
lines changed

MaterialDesignThemes.UITests/WPF/TreeListViews/TreeItem.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using System.Diagnostics;
1+
using System.ComponentModel;
2+
using System.Diagnostics;
3+
using System.Windows.Data;
24

35
namespace MaterialDesignThemes.UITests.WPF.TreeListViews;
46

@@ -12,9 +14,12 @@ public class TreeItem
1214
//NB: making the assumption changes occur ont he UI thread
1315
public TestableCollection<TreeItem> Children { get; } = new();
1416

17+
public ICollectionView ChildrenView { get; }
18+
1519
public TreeItem(string value, TreeItem? parent)
1620
{
1721
Value = value;
1822
Parent = parent;
23+
ChildrenView = CollectionViewSource.GetDefaultView(Children);
1924
}
2025
}

MaterialDesignThemes.UITests/WPF/TreeListViews/TreeListViewWithCollectionView.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
mc:Ignorable="d">
1212
<materialDesign:TreeListView ItemsSource="{Binding Items}">
1313
<materialDesign:TreeListView.Resources>
14-
<HierarchicalDataTemplate DataType="{x:Type local:TreeItem}" ItemsSource="{Binding Children}">
14+
<HierarchicalDataTemplate DataType="{x:Type local:TreeItem}" ItemsSource="{Binding ChildrenView}">
1515
<TextBlock Text="{Binding Value}" />
1616
</HierarchicalDataTemplate>
1717
</materialDesign:TreeListView.Resources>

MaterialDesignThemes.Wpf/TreeListViewItem.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Collections.Specialized;
1+
using System.Collections;
2+
using System.Collections.Specialized;
23
using MaterialDesignThemes.Wpf.Internal;
34

45
namespace MaterialDesignThemes.Wpf;
@@ -16,7 +17,7 @@ public TreeListViewItem()
1617
private TreeListViewContentPresenter? ContentPresenter { get; set; }
1718
private TreeListView? TreeListView { get; set; }
1819

19-
public IEnumerable<object?> GetChildren() => Children ?? Array.Empty<object?>();
20+
public IEnumerable<object?> GetChildren() => Children?.OfType<object?>() ?? Array.Empty<object?>();
2021

2122
public bool IsExpanded
2223
{
@@ -55,14 +56,14 @@ public int Level
5556
DependencyProperty.Register(nameof(Level), typeof(int), typeof(TreeListViewItem), new PropertyMetadata(0));
5657

5758

58-
internal IEnumerable<object?>? Children
59+
internal IEnumerable? Children
5960
{
60-
get => (IEnumerable<object?>)GetValue(ChildrenProperty);
61+
get => (IEnumerable?)GetValue(ChildrenProperty);
6162
set => SetValue(ChildrenProperty, value);
6263
}
6364

6465
internal static readonly DependencyProperty ChildrenProperty =
65-
DependencyProperty.Register("Children", typeof(IEnumerable<object?>), typeof(TreeListViewItem),
66+
DependencyProperty.Register(nameof(Children), typeof(IEnumerable), typeof(TreeListViewItem),
6667
new PropertyMetadata(null, OnChildrenChanged));
6768

6869
private static void OnChildrenChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
@@ -140,7 +141,7 @@ internal void ClearTreeListViewItem(object item, TreeListView treeListView)
140141

141142
private void UpdateHasChildren()
142143
{
143-
SetCurrentValue(HasItemsProperty, Children?.Any() == true);
144+
SetCurrentValue(HasItemsProperty, GetChildren().Any());
144145
}
145146

146147
protected override void OnMouseDoubleClick(MouseButtonEventArgs e)

0 commit comments

Comments
 (0)