private void InsulinOnPropertyChanged(object sender, PropertyChangedEventArgs args) { var insulin = (InsulinItem)sender; var oldPoint = insulin.GetDataPoint(); InsulinDataPoints.Remove(oldPoint); AddInsulinDatapoint(insulin.GenerateDataPoint()); RaisePropertyChanged(() => InsulinDataPoints); }
private void InsulinCollectionChanged(object sender, NotifyCollectionChangedEventArgs args) { switch (args.Action) { case NotifyCollectionChangedAction.Add: foreach (InsulinItem insulin in args.NewItems) { AddInsulinDatapoint(insulin.GetDataPoint()); } break; case NotifyCollectionChangedAction.Remove: foreach (InsulinItem insulin in args.OldItems) { var point = ModelToDataPoint(insulin); if (!InsulinDataPoints.Remove(point)) { throw new InvalidOperationException($"Insulin {insulin.ToString()} datapoint {point} was not removed"); } } break; case NotifyCollectionChangedAction.Replace: int count = args.OldItems.Count; for (int i = 0; i < count; i++) { var insulin = args.OldItems[i] as InsulinItem; var point = ModelToDataPoint(insulin); if (!InsulinDataPoints.Contains(point)) { throw new ValueUnavailableException("Datapoint is missing."); } InsulinDataPoints.Remove(point); if (args.NewItems[i] is InsulinItem newInsulin) { AddInsulinDatapoint(newInsulin.GetDataPoint()); } } break; case NotifyCollectionChangedAction.Move: break; case NotifyCollectionChangedAction.Reset: InsulinDataPoints.Clear(); break; default: throw new ArgumentOutOfRangeException(); } }