コード例 #1
0
        private void RefreshViewCollection(bool openNewEntry = true)
        {
            // Merge / update differences between the currentTimeEntries and viewCollection

            // Use reverse for-int loop so we can modify the collection.
            for (int i = viewCollection.Count - 1; i >= 0; i--)
            {
                TimeEntryView view = viewCollection[i];
                int           id   = view.GetId();
                if (!entryByIds.ContainsKey(id))
                {
                    continue;
                }

                // check if we deleted a record from CurrentTimeEntries
                // viewCollection could be out of date here
                if (!CurrentTimeEntries.Contains(entryByIds[id]))
                {
                    viewCollection.RemoveAt(i);
                    continue;
                }

                // update row details every tick
                TimeEntryView newView = entryByIds[id].ToView(id);
                view.Active  = newView.Active;
                view.Hours   = newView.Hours;
                view.Name    = newView.Name;
                view.Details = newView.Details;
            }

            // Insert new
            foreach (TimeEntry entry in CurrentTimeEntries)
            {
                if (entryByIds.ContainsValue(entry))
                {
                    continue;
                }

                int newId = entryByIds.Keys.Count + 1;
                entryByIds[newId] = entry;
                var newRow = entry.ToView(newId);
                viewCollection.Add(newRow);

                if (openNewEntry)
                {
                    // autoselect newest entry
                    TableGrid.SelectedItem = newRow;
                    TableGrid.ScrollIntoView(newRow);
                    DisplayDetails(true); // trigger Edit window
                }
            }

            //viewCollection.Clear();
            //foreach (TimeEntry entry in currentTimeEntries)
            //{
            //    viewCollection.Add(entry.ToView());
            //}

            TotalHours.Text = CurrentTimeEntries.Sum(m => m.DurationHours)
                              .ToString("0.00") + " total hours";
        }