10
10
11
11
namespace MaterialDesignColors . WpfExample . Domain
12
12
{
13
- public sealed class Movie : BindableBase
13
+ public sealed class Movie
14
14
{
15
- private string _name ;
16
-
17
- public string Name
15
+ public Movie ( string name , string director )
18
16
{
19
- get { return _name ; }
20
- set
21
- {
22
- _name = value ;
23
- OnPropertyChanged ( ) ;
24
- }
17
+ Name = name ;
18
+ Director = director ;
25
19
}
26
20
27
- private string _director ;
21
+ public string Name { get ; }
28
22
29
- public string Director
30
- {
31
- get { return _director ; }
32
- set
33
- {
34
- _director = value ;
35
- OnPropertyChanged ( ) ;
36
- }
37
- }
23
+ public string Director { get ; }
38
24
}
39
25
40
- public sealed class MovieCategory : BindableBase
26
+ public sealed class MovieCategory
41
27
{
42
- public string Name { get ; }
43
-
44
- public ObservableCollection < Movie > Movies { get ; }
45
-
46
- public MovieCategory ( string name )
28
+ public MovieCategory ( string name , params Movie [ ] movies )
47
29
{
48
30
Name = name ;
49
- Movies = new ObservableCollection < Movie > ( ) ;
31
+ Movies = new ObservableCollection < Movie > ( movies ) ;
50
32
}
33
+
34
+ public string Name { get ; }
35
+
36
+ public ObservableCollection < Movie > Movies { get ; }
51
37
}
52
38
53
- public sealed class TreesViewModel : BindableBase
39
+ public sealed class TreesViewModel : INotifyPropertyChanged
54
40
{
41
+ private object _selectedItem ;
42
+
55
43
public ObservableCollection < MovieCategory > MovieCategories { get ; }
56
44
57
45
public AnotherCommandImplementation AddCommand { get ; }
58
46
59
47
public AnotherCommandImplementation RemoveSelectedItemCommand { get ; }
60
48
61
- private object _selectedItem ;
62
49
public object SelectedItem
63
50
{
64
51
get { return _selectedItem ; }
65
52
set
66
53
{
67
- _selectedItem = value ;
68
- OnPropertyChanged ( ) ;
54
+ this . MutateVerbose ( ref _selectedItem , value , args => PropertyChanged ? . Invoke ( this , args ) ) ;
69
55
}
70
56
}
71
57
72
58
public TreesViewModel ( )
73
59
{
74
60
MovieCategories = new ObservableCollection < MovieCategory >
75
61
{
76
- new MovieCategory ( "Action" )
77
- {
78
- Movies =
79
- {
80
- new Movie
81
- {
82
- Name = "Predator" ,
83
- Director = "John McTiernan"
84
- } ,
85
- new Movie
86
- {
87
- Name = "Alien" ,
88
- Director = "Ridley Scott"
89
- } ,
90
- new Movie
91
- {
92
- Name = "Prometheus" ,
93
- Director = "Ridley Scott"
94
- }
95
- }
96
- } ,
97
- new MovieCategory ( "Comedy" )
98
- {
99
- Movies =
100
- {
101
- new Movie
102
- {
103
- Name = "EuroTrip" ,
104
- Director = "Jeff Schaffer"
105
- } ,
106
- new Movie
107
- {
108
- Name = "EuroTrip" ,
109
- Director = "Jeff Schaffer"
110
- }
111
- }
112
- }
62
+ new MovieCategory ( "Action" ,
63
+ new Movie ( "Predator" , "John McTiernan" ) ,
64
+ new Movie ( "Alien" , "Ridley Scott" ) ,
65
+ new Movie ( "Prometheus" , "Ridley Scott" ) ) ,
66
+ new MovieCategory ( "Comedy" ,
67
+ new Movie ( "EuroTrip" , "Jeff Schaffer" ) ,
68
+ new Movie ( "EuroTrip" , "Jeff Schaffer" )
69
+ )
113
70
} ;
114
71
115
72
AddCommand = new AnotherCommandImplementation (
@@ -121,27 +78,25 @@ public TreesViewModel()
121
78
}
122
79
else
123
80
{
124
- int index = new Random ( ) . Next ( 0 , MovieCategories . Count ) ;
81
+ var index = new Random ( ) . Next ( 0 , MovieCategories . Count ) ;
125
82
126
83
MovieCategories [ index ] . Movies . Add (
127
- new Movie
128
- {
129
- Name = GenerateString ( 15 ) ,
130
- Director = GenerateString ( 20 )
131
- } ) ;
84
+ new Movie ( GenerateString ( 15 ) , GenerateString ( 20 ) ) ) ;
132
85
}
133
86
} ) ;
134
87
135
88
RemoveSelectedItemCommand = new AnotherCommandImplementation (
136
89
_ =>
137
90
{
138
- if ( SelectedItem is MovieCategory )
91
+ var movieCategory = SelectedItem as MovieCategory ;
92
+ if ( movieCategory != null )
139
93
{
140
- MovieCategories . Remove ( SelectedItem as MovieCategory ) ;
94
+ MovieCategories . Remove ( movieCategory ) ;
141
95
}
142
- else if ( SelectedItem is Movie )
96
+ else
143
97
{
144
98
var movie = SelectedItem as Movie ;
99
+ if ( movie == null ) return ;
145
100
MovieCategories . FirstOrDefault ( v => v . Movies . Contains ( movie ) ) ? . Movies . Remove ( movie ) ;
146
101
}
147
102
} ,
@@ -152,9 +107,11 @@ private static string GenerateString(int length)
152
107
{
153
108
var random = new Random ( ) ;
154
109
155
- return String . Join ( String . Empty ,
110
+ return string . Join ( string . Empty ,
156
111
Enumerable . Range ( 0 , length )
157
- . Select ( v => ( char ) random . Next ( ( int ) 'a' , ( int ) 'z' + 1 ) ) ) ;
112
+ . Select ( v => ( char ) random . Next ( 'a' , 'z' + 1 ) ) ) ;
158
113
}
114
+
115
+ public event PropertyChangedEventHandler PropertyChanged ;
159
116
}
160
117
}
0 commit comments