private void UpdateTimeGroups() { TimeGroupViewModels.CollectionChanged -= OnTimeGroupsCollectionChanged; TimeGroupViewModels.Clear(); groupsDictionary.Clear(); itemGroupDictionary.Clear(); var entriesWithGroups = EntryViewModels.Select(x => new { TimeGroup = GetTimeGroupForItem(x), EntryVm = x }).ToList(); var groupedItems = entriesWithGroups.GroupBy(i => i.TimeGroup).OrderByDescending(g => g.Key.OrderIndex).ToList(); foreach (var group in groupedItems) { var groupName = @group.Key.GroupName; var groupVm = new EntryListItemTimeGroupViewModel(groupName); var sortedItems = @group.OrderByDescending(i => i.EntryVm.DateAdded).Select(x => x.EntryVm); groupVm.Items = new ObservableCollection<EntryListItemViewModel>(sortedItems); TimeGroupViewModels.Add(groupVm); foreach (var entry in groupVm.Items) { itemGroupDictionary.Add(entry, groupVm); } groupsDictionary.Add(groupName, groupVm); } TimeGroupViewModels.CollectionChanged += OnTimeGroupsCollectionChanged; }
private void AddEntryToGroup(EntryListItemViewModel viewModel) { var group = GetTimeGroupForItem(viewModel); EntryListItemTimeGroupViewModel groupViewModel; if (!groupsDictionary.TryGetValue(group.GroupName, out groupViewModel)) { groupViewModel = new EntryListItemTimeGroupViewModel(group.GroupName); groupViewModel.Items = new ObservableCollection<EntryListItemViewModel>(); TimeGroupViewModels.Insert(0, groupViewModel); groupsDictionary.Add(group.GroupName, groupViewModel); } groupViewModel.Items.Insert(0, viewModel); if (!itemGroupDictionary.ContainsKey(viewModel)) { itemGroupDictionary.Add(viewModel, groupViewModel); } }