private void SetUnsaved(object sender, NotifyCollectionChangedEventArgs e) { if (e != null && e.IsAddOrRemove() && ReferenceEquals(sender, AllData)) { if (e.NewItems != null) { foreach (object item in e.NewItems) { BaseDataClass obj = (BaseDataClass)item; int errs = obj.GetErrorCount(ErrorType.Error); NumErrors += errs; if (errs > 0) { NotifyErrorStateChanged(new ErrorStateChangedEventArgs(obj)); } errs = obj.GetErrorCount(ErrorType.Warning); NumWarnings += errs; if (errs > 0) { NotifyErrorStateChanged(new ErrorStateChangedEventArgs(obj)); } obj.ErrorStateChanged += ObjectErrorStateChanged; } } if (e.OldItems != null) { foreach (object item in e.OldItems) { BaseDataClass obj = (BaseDataClass)item; int errs = obj.GetErrorCount(ErrorType.Error); NumErrors -= errs; if (errs > 0) { NotifyErrorStateChanged(new ErrorStateChangedEventArgs(obj)); } errs = obj.GetErrorCount(ErrorType.Warning); NumWarnings -= errs; if (errs > 0) { NotifyErrorStateChanged(new ErrorStateChangedEventArgs(obj)); } obj.ErrorStateChanged -= ObjectErrorStateChanged; } } } if (!Unsaved) { Unsaved = true; SaveStateChanged?.Invoke(); Timer?.Start(); FileHelpers.SetWindowHeaders(); } }