From 2430daffb60432079daab57e246369d7526209b9 Mon Sep 17 00:00:00 2001 From: George Alexandria Date: Thu, 23 Aug 2018 00:30:46 +0300 Subject: [PATCH] Sorted classifications by alphabetical order: issue #28 --- .../CoCo.UI/ViewModels/LanguageViewModel.cs | 33 +++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/common/CoCo.UI/ViewModels/LanguageViewModel.cs b/src/common/CoCo.UI/ViewModels/LanguageViewModel.cs index 9677537..d5c0560 100644 --- a/src/common/CoCo.UI/ViewModels/LanguageViewModel.cs +++ b/src/common/CoCo.UI/ViewModels/LanguageViewModel.cs @@ -1,12 +1,16 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; +using System.Windows.Data; using CoCo.UI.Data; namespace CoCo.UI.ViewModels { public class LanguageViewModel : BaseViewModel, IClassificationProvider { + private readonly ObservableCollection _classifications = + new ObservableCollection(); + public LanguageViewModel(Language language, IResetValuesProvider resetValuesProvider) { Name = language.Name; @@ -14,9 +18,13 @@ public LanguageViewModel(Language language, IResetValuesProvider resetValuesProv { var classificationViewModel = new ClassificationFormatViewModel(classification, resetValuesProvider); classificationViewModel.PropertyChanged += OnClassificationPropertyChanged; - Classifications.Add(classificationViewModel); + _classifications.Add(classificationViewModel); } + Classifications = CollectionViewSource.GetDefaultView(_classifications); + Classifications.SortDescriptions.Add( + new SortDescription(nameof(ClassificationFormatViewModel.DisplayName), ListSortDirection.Ascending)); + PresetsContainer = new PresetsViewModel(language.Presets, this, resetValuesProvider); } @@ -32,7 +40,7 @@ public LanguageViewModel(Language language, IResetValuesProvider resetValuesProv { // NOTE: 01 – all uncheked, 10 – all cheked, 11 – has different states var flag = 0; - foreach (var item in Classifications) + foreach (var item in _classifications) { flag |= item.IsChecked ? 0b10 : 0b01; } @@ -51,15 +59,14 @@ public LanguageViewModel(Language language, IResetValuesProvider resetValuesProv } // TODO: add some mechanism to suspend notification at a few time - foreach (var item in Classifications) + foreach (var item in _classifications) { item.IsChecked = isCheked; } } } - public ObservableCollection Classifications { get; } = - new ObservableCollection(); + public ICollectionView Classifications { get; } private ClassificationFormatViewModel _selectedClassification; @@ -67,9 +74,9 @@ public ClassificationFormatViewModel SelectedClassification { get { - if (_selectedClassification == null && Classifications.Count > 0) + if (_selectedClassification == null && _classifications.Count > 0) { - SelectedClassification = Classifications[0]; + SelectedClassification = _classifications[0]; } return _selectedClassification; } @@ -79,7 +86,7 @@ public ClassificationFormatViewModel SelectedClassification public Language ExtractData() { var language = new Language(Name); - foreach (var classificationViewModel in Classifications) + foreach (var classificationViewModel in _classifications) { language.Classifications.Add(classificationViewModel.ExtractData()); } @@ -100,21 +107,21 @@ private void OnClassificationPropertyChanged(object sender, PropertyChangedEvent } } - ICollection IClassificationProvider.GetCurrentClassificaions() => Classifications; + ICollection IClassificationProvider.GetCurrentClassificaions() => _classifications; void IClassificationProvider.SetCurrentClassificaions(ICollection classifications) { /// TODO: again bulk operation under a - while (Classifications.Count > 0) + while (_classifications.Count > 0) { - Classifications[0].PropertyChanged -= OnClassificationPropertyChanged; - Classifications.RemoveAt(0); + _classifications[0].PropertyChanged -= OnClassificationPropertyChanged; + _classifications.RemoveAt(0); } foreach (var item in classifications) { item.PropertyChanged += OnClassificationPropertyChanged; - Classifications.Add(item); + _classifications.Add(item); } // NOTE: Reset selected classification from old items SelectedClassification = null;