protected virtual void SaveCollection(SaveModeArgs obj) { obj.SetRow(_selectedItem); if (ViewService.ViewMode.Peek() == FormMode.SAVED) { var mode = ViewService.ViewMode.Pop(); if (mode == FormMode.ADDMODE) { AddToCollection(null); } //if we save then add return; } ValidationResult validation = ValidateVm(); if (validation.IsValid) { if (!DataStoreContainsDuplicates(obj)) { if (ViewService.ViewMode.Peek() == FormMode.VALIDATION) { ViewService.ViewMode.Pop(); } IsReadOnly = true; VmData.Add(_selectedItem); DoSave(obj); //drop wip and then add saved if (ViewService.ViewMode.Peek() == FormMode.SAVED) { ViewService.ViewMode.Pop(); ViewService.IsDirty = true; } if (ViewService.ViewMode.Peek() == FormMode.WIP) { ViewService.ViewMode.Pop(); } } else { if (ViewService.ViewMode.Peek() != FormMode.WIP) { SendMessageBox("Duplicate Error Warning", "Duplicates not allowed"); } IsReadOnly = false; } } else { var msg = new ValidationArgs(); msg.Validation = validation.ErrorList; eventAggregator.GetEvent <ValidationArgsEvent>().Publish(msg); } }