1
- using System . Collections . ObjectModel ;
1
+ using System . Collections ;
2
+ using System . Collections . ObjectModel ;
3
+ using System . Windows . Documents ;
2
4
using MaterialDesignThemes . Wpf ;
3
5
4
6
namespace MaterialDesignDemo . Domain ;
@@ -45,6 +47,19 @@ public class Planet
45
47
public double Velocity { get ; set ; }
46
48
}
47
49
50
+ public class TestItem
51
+ {
52
+ public TestItem ? Parent { get ; set ; }
53
+ public string Name { get ; }
54
+ public ObservableCollection < TestItem > Items { get ; }
55
+
56
+ public TestItem ( string name , IEnumerable < TestItem > items )
57
+ {
58
+ Name = name ;
59
+ Items = new ObservableCollection < TestItem > ( items ) ;
60
+ }
61
+ }
62
+
48
63
public sealed class MovieCategory
49
64
{
50
65
public MovieCategory ( string name , params Movie [ ] movies )
@@ -61,13 +76,26 @@ public MovieCategory(string name, params Movie[] movies)
61
76
public sealed class TreesViewModel : ViewModelBase
62
77
{
63
78
private object ? _selectedItem ;
79
+ private TestItem ? _selectedTreeItem ;
80
+
81
+ public ObservableCollection < TestItem > TreeItems { get ; } = new ( ) ;
64
82
65
83
public ObservableCollection < MovieCategory > MovieCategories { get ; }
66
84
67
85
public AnotherCommandImplementation AddCommand { get ; }
68
86
69
87
public AnotherCommandImplementation RemoveSelectedItemCommand { get ; }
70
88
89
+ public AnotherCommandImplementation AddListTreeItemCommand { get ; }
90
+
91
+ public AnotherCommandImplementation RemoveListTreeItemCommand { get ; }
92
+
93
+ public TestItem ? SelectedTreeItem
94
+ {
95
+ get => _selectedTreeItem ;
96
+ set => SetProperty ( ref _selectedTreeItem , value ) ;
97
+ }
98
+
71
99
public object ? SelectedItem
72
100
{
73
101
get => _selectedItem ;
@@ -76,6 +104,68 @@ public object? SelectedItem
76
104
77
105
public TreesViewModel ( )
78
106
{
107
+ Random random = new ( ) ;
108
+ for ( int i = 0 ; i < 10 ; i ++ )
109
+ {
110
+ TreeItems . Add ( CreateTestItem ( random , 1 ) ) ;
111
+ }
112
+
113
+ static TestItem CreateTestItem ( Random random , int depth )
114
+ {
115
+ int numberOfChildren = depth < 5 ? random . Next ( 0 , 6 ) : 0 ;
116
+ var children = Enumerable . Range ( 0 , numberOfChildren ) . Select ( _ => CreateTestItem ( random , depth + 1 ) ) ;
117
+ var rv = new TestItem ( GenerateString ( random . Next ( 4 , 10 ) ) , children ) ;
118
+ foreach ( var child in rv . Items )
119
+ {
120
+ child . Parent = rv ;
121
+ }
122
+ return rv ;
123
+ }
124
+
125
+ AddListTreeItemCommand = new ( _ =>
126
+ {
127
+ if ( SelectedTreeItem is { } treeItem )
128
+ {
129
+ var newItem = CreateTestItem ( random , 1 ) ;
130
+ newItem . Parent = treeItem ;
131
+ treeItem . Items . Add ( newItem ) ;
132
+ }
133
+ else
134
+ {
135
+ TreeItems . Add ( CreateTestItem ( random , 1 ) ) ;
136
+ }
137
+ } ) ;
138
+
139
+ RemoveListTreeItemCommand = new ( items =>
140
+ {
141
+ if ( items is IEnumerable enumerable )
142
+ {
143
+ foreach ( TestItem testItem in enumerable )
144
+ {
145
+ if ( testItem . Parent is { } parent )
146
+ {
147
+ parent . Items . Remove ( testItem ) ;
148
+ }
149
+ else
150
+ {
151
+ TreeItems . Remove ( testItem ) ;
152
+ }
153
+ }
154
+ }
155
+ if ( SelectedTreeItem is { } selectedItem )
156
+ {
157
+ if ( selectedItem . Parent is { } parent )
158
+ {
159
+ parent . Items . Remove ( selectedItem ) ;
160
+ }
161
+ else
162
+ {
163
+ TreeItems . Remove ( selectedItem ) ;
164
+ }
165
+ SelectedTreeItem = null ;
166
+ }
167
+ } ) ;
168
+
79
169
MovieCategories = new ObservableCollection < MovieCategory >
80
170
{
81
171
new MovieCategory ( "Action" ,
@@ -87,6 +177,8 @@ public TreesViewModel()
87
177
new Movie ( "EuroTrip" , "Jeff Schaffer" )
88
178
)
89
179
} ;
180
+ MovieCategories . Add ( MovieCategories [ 0 ] ) ;
181
+ MovieCategories . Add ( MovieCategories [ 1 ] ) ;
90
182
91
183
AddCommand = new AnotherCommandImplementation (
92
184
_ =>
0 commit comments