55using System . Collections . ObjectModel ;
66using System . ComponentModel ;
77using System . IO ;
8- using System . Linq ;
98using System . Windows ;
109using System . Windows . Input ;
1110
1211namespace SharpPasswordManager . ViewModels
1312{
1413 public class CategoryViewModel : INotifyPropertyChanged
1514 {
16- public delegate void CategoryChangeHandler ( ) ;
15+ public delegate void CategoryChangeHandler ( CategoryModel category ) ;
1716 public event CategoryChangeHandler OnCategoryChanged ;
1817
1918 IStorageHandler < CategoryModel , DataModel > storageHandler ;
20- public ObservableCollection < CategoryModel > CategoriesList { get ; set ; }
19+ public ObservableCollection < CategoryModel > CategoriesList { get ; set ; } = new ObservableCollection < CategoryModel > ( ) ;
2120
2221 private CategoryModel selectedCategory ;
2322 public CategoryModel SelectedCategory
@@ -26,12 +25,7 @@ public CategoryModel SelectedCategory
2625 set
2726 {
2827 selectedCategory = value ;
29- if ( selectedCategory == null )
30- storageHandler . CurrentCategoryIndex = - 1 ;
31- else
32- storageHandler . CurrentCategoryIndex = CategoriesList . IndexOf ( SelectedCategory ) ;
33-
34- OnCategoryChanged ? . Invoke ( ) ;
28+ OnCategoryChanged ? . Invoke ( selectedCategory ) ;
3529 }
3630 }
3731
@@ -43,27 +37,41 @@ public CategoryViewModel(IStorageHandler<CategoryModel, DataModel> storageHandle
4337
4438 private void GetCategories ( )
4539 {
40+ int index = - 1 ;
41+ if ( SelectedCategory != null )
42+ index = CategoriesList . IndexOf ( SelectedCategory ) ;
43+
44+ CategoriesList . Clear ( ) ;
45+
4646 try
4747 {
4848 CategoriesList = new ObservableCollection < CategoryModel > ( storageHandler . GetCategories ( ) ) ;
4949 }
5050 catch ( FileNotFoundException ex )
51- {
52- MessageBox . Show ( $ "File not found { ex . Message } .") ;
53- }
51+ { MessageBox . Show ( $ "File not found { ex . Message } .") ; }
5452 catch ( InvalidOperationException ex )
55- {
56- MessageBox . Show ( $ "Can't read data from file { ex . Message } ." ) ;
57- }
53+ { MessageBox . Show ( $ "Can't read data from file { ex . Message } ." ) ; }
54+ catch ( Exception ex )
55+ { MessageBox . Show ( $ "Something is wrong { ex . Message } ." ) ; }
5856
5957 OnPropertyChanged ( nameof ( CategoriesList ) ) ;
58+
59+ if ( index > - 1 && index < CategoriesList . Count )
60+ SelectedCategory = CategoriesList [ index ] ;
61+ else
62+ SelectedCategory = null ;
63+
64+ OnPropertyChanged ( nameof ( SelectedCategory ) ) ;
65+ }
66+
67+ public CategoryModel ShareSelectedCategory ( )
68+ {
69+ return SelectedCategory ;
6070 }
6171
6272 public void DataChanged ( )
6373 {
6474 GetCategories ( ) ;
65- SelectedCategory = CategoriesList [ storageHandler . CurrentCategoryIndex ] ;
66- OnPropertyChanged ( nameof ( CategoriesList ) ) ;
6775 }
6876
6977 private ICommand addCategoryCmd ;
@@ -87,20 +95,15 @@ private void AddCategory()
8795 try
8896 {
8997 storageHandler . AddCategory ( newCategory ) ;
90- GetCategories ( ) ;
9198 }
9299 catch ( FileNotFoundException ex )
93- {
94- MessageBox . Show ( $ "File not found { ex . Message } .") ;
95- }
100+ { MessageBox . Show ( $ "File not found { ex . Message } .") ; }
96101 catch ( InvalidOperationException ex )
97- {
98- MessageBox . Show ( $ "Can't save data to file { ex . Message } ." ) ;
99- }
102+ { MessageBox . Show ( $ "Can't write data to file { ex . Message } ." ) ; }
103+ catch ( Exception ex )
104+ { MessageBox . Show ( $ "Something is wrong { ex . Message } ." ) ; }
100105
101- SelectedCategory = CategoriesList . LastOrDefault ( ) ;
102- OnCategoryChanged ? . Invoke ( ) ;
103- OnPropertyChanged ( nameof ( SelectedCategory ) ) ;
106+ GetCategories ( ) ;
104107 }
105108 }
106109
@@ -123,21 +126,17 @@ private void DeleteCategory()
123126 {
124127 try
125128 {
126- storageHandler . RemoveCategory ( selectedCategory ) ;
127- GetCategories ( ) ;
129+ storageHandler . RemoveCategory ( SelectedCategory ) ;
128130 }
129131 catch ( FileNotFoundException ex )
130- {
131- MessageBox . Show ( $ "File not found { ex . Message } .") ;
132- }
132+ { MessageBox . Show ( $ "File not found { ex . Message } .") ; }
133133 catch ( InvalidOperationException ex )
134- {
135- MessageBox . Show ( $ "Can't save data to file { ex . Message } ." ) ;
136- }
134+ { MessageBox . Show ( $ "Can't save data to file { ex . Message } ." ) ; }
135+ catch ( Exception ex )
136+ { MessageBox . Show ( $ "Something is wrong { ex . Message } ." ) ; }
137137
138138 SelectedCategory = null ;
139- OnCategoryChanged ? . Invoke ( ) ;
140- OnPropertyChanged ( nameof ( CategoriesList ) ) ;
139+ GetCategories ( ) ;
141140 }
142141 }
143142
@@ -151,34 +150,25 @@ public ICommand EditCategoryCmd
151150 }
152151 private void EditCategory ( )
153152 {
154- CategoryModel oldCategory = new CategoryModel ( ) ;
155- oldCategory . Name = selectedCategory . Name ;
156- oldCategory . DataIndexes = new List < int > ( selectedCategory . DataIndexes ) ;
157-
158- CategoryValidateViewModel validateVM = new CategoryValidateViewModel ( ref selectedCategory ) ;
153+ CategoryModel newCategory = new CategoryModel { DataIndexes = new List < int > ( SelectedCategory ? . DataIndexes ) , Name = SelectedCategory . Name } ;
154+ CategoryValidateViewModel validateVM = new CategoryValidateViewModel ( ref newCategory ) ;
159155 Views . CategoryValidateView validateView = new Views . CategoryValidateView ( ) ;
160156 validateView . DataContext = validateVM ;
161157 validateView . ShowDialog ( ) ;
162158
163- if ( ! selectedCategory . Equals ( oldCategory ) )
159+ if ( ! SelectedCategory . Equals ( newCategory ) )
164160 {
165161 try
166162 {
167- storageHandler . ReplaceCategory ( oldCategory , selectedCategory ) ;
168- GetCategories ( ) ;
163+ storageHandler . ReplaceCategory ( SelectedCategory , newCategory ) ;
169164 }
170165 catch ( FileNotFoundException ex )
171- {
172- MessageBox . Show ( $ "File not found { ex . Message } .") ;
173- }
166+ { MessageBox . Show ( $ "File not found { ex . Message } .") ; }
174167 catch ( InvalidOperationException ex )
175- {
176- MessageBox . Show ( $ "Can't save data to file { ex . Message } .") ;
177- }
178-
179- SelectedCategory = CategoriesList [ storageHandler . CurrentCategoryIndex ] ;
180- OnCategoryChanged ? . Invoke ( ) ;
181- OnPropertyChanged ( nameof ( CategoriesList ) ) ;
168+ { MessageBox . Show ( $ "Can't save data to file { ex . Message } .") ; }
169+ catch ( Exception ex )
170+ { MessageBox . Show ( $ "Something is wrong { ex . Message } .") ; }
171+ GetCategories ( ) ;
182172 }
183173 }
184174
0 commit comments