Bevisuali.Model.Workbench.LearningTasksChanged C# (CSharp) Method

LearningTasksChanged() protected method

protected LearningTasksChanged ( object sender, NotifyCollectionChangedEventArgs e ) : void
sender object
e NotifyCollectionChangedEventArgs
return void
        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);
                    }
                }
            }
        }