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