protected void LearningTasksChanged(object sender, NotifyCollectionChangedEventArgs e) { var tasksNew = (e.NewItems ?? new object[0]).Cast <LearningTask>(); var tasksOld = (e.OldItems ?? new object[0]).Cast <LearningTask>(); lock (_learningTasksInternal) { // Remove all. if (e.Action == NotifyCollectionChangedAction.Reset) { _learningTasksInternal.Clear(); } // Remove individuals. else if (e.Action == NotifyCollectionChangedAction.Remove || e.Action == NotifyCollectionChangedAction.Replace) { foreach (var old in tasksOld) { var oldRecord = _learningTasksInternal .FirstOrDefault(o => o.LearningTask == old); _learningTasksInternal.Remove(oldRecord); } } // Add new. else if (e.Action == NotifyCollectionChangedAction.Add || e.Action == NotifyCollectionChangedAction.Replace) { foreach (var @new in tasksNew) { @new.Workbench = this; LearningTaskRecord record = new LearningTaskRecord(); record.LearningTask = (LearningTask)@new; _learningTasksInternal.Add(record); } } } }
protected void LearningTasksChanged(object sender, NotifyCollectionChangedEventArgs e) { var tasksNew = (e.NewItems ?? new object[0]).Cast<LearningTask>(); var tasksOld = (e.OldItems ?? new object[0]).Cast<LearningTask>(); lock (_learningTasksInternal) { // Remove all. if (e.Action == NotifyCollectionChangedAction.Reset) { _learningTasksInternal.Clear(); } // Remove individuals. else if (e.Action == NotifyCollectionChangedAction.Remove || e.Action == NotifyCollectionChangedAction.Replace) { foreach (var old in tasksOld) { var oldRecord = _learningTasksInternal .FirstOrDefault(o => o.LearningTask == old); _learningTasksInternal.Remove(oldRecord); } } // Add new. else if (e.Action == NotifyCollectionChangedAction.Add || e.Action == NotifyCollectionChangedAction.Replace) { foreach (var @new in tasksNew) { @new.Workbench = this; LearningTaskRecord record = new LearningTaskRecord(); record.LearningTask = (LearningTask)@new; _learningTasksInternal.Add(record); } } } }