/// <summary> /// Trata el evento de cierre de un documento /// </summary> private bool TreatEventCloseForm(PaneViewModel paneViewModel) { bool canClose = true; IFormView formView = paneViewModel?.GetFormView(); // Comprueba el ViewModel del control para comprobar si se puede cerrar if (formView != null && formView.FormView.ViewModel.IsUpdated) { SystemControllerEnums.ResultType result; // Pregunta si se debe grabar el documento result = Globals.HostController.ControllerWindow.ShowQuestionCancel("Se han realizado modificaciones que aún no se han grabado. ¿Desea grabarlas ahora?"); // Graba el documento si es necesario if (result == SystemControllerEnums.ResultType.Yes) { // Graba el documento (formView.FormView.ViewModel as BaseFormViewModel)?.SaveCommand.Execute(null); // Comprueba si se puede cerrar la ventana canClose = !formView.FormView.IsUpdated; } else { canClose = result != SystemControllerEnums.ResultType.Cancel; } } // Si se puede borrar, elimina la ventana de la colección if (canClose) { Documents.Remove(paneViewModel.WindowID); formView.FormView.CloseViewModel(); } // Devuelve el valor que indica si se puede cerrar return(canClose); }
/// <summary> /// Añade un documento a la lista de documentos tratados /// </summary> private void AddDocument(PaneViewModel paneViewModel) { // Añade el documento if (!ExistsDocument(paneViewModel.WindowID)) { Documents.Add(paneViewModel.WindowID, paneViewModel); } // Asigna los manejadores de evento a la vista if (paneViewModel.ContentControl != null && paneViewModel.ContentControl is IFormView) { paneViewModel.LayoutPane.Closing += (sender, evntArgs) => evntArgs.Cancel = !TreatEventCloseForm(paneViewModel); } // Activa el documento ActiveDocument = paneViewModel; }
/// <summary> /// Constructor /// </summary> public LayoutDockingEventArgs(PaneViewModel activeDocument) { ActiveDocument = activeDocument; }