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);
            }
        }