/// <summary> /// Notifies external classes of property changes. /// </summary> protected void NotifyChanges() { Action action = () => { // Create event args ListChangedEventArgs eventArgs = null; if (_suspensionContext != null && _suspensionContext.Mode == SuspensionMode.Adding) { if (_suspensionContext.NewItems.Count != 0) { eventArgs = new NotifyRangedListChangedEventArgs(NotifyRangedListChangedAction.Add, _suspensionContext.NewItems, _suspensionContext.NewItemIndices); } } else if (_suspensionContext != null && _suspensionContext.Mode == SuspensionMode.Removing) { if (_suspensionContext.OldItems.Count != 0) { eventArgs = new NotifyRangedListChangedEventArgs(NotifyRangedListChangedAction.Remove, _suspensionContext.OldItems, _suspensionContext.OldItemIndices); } } else { eventArgs = new NotifyListChangedEventArgs(ListChangedType.Reset); } // Fire events if (eventArgs != null) { OnListChanged(eventArgs); } }; if (AutomaticallyDispatchChangeNotifications) { _dispatcherService.BeginInvokeIfRequired(action); } else { action(); } }