2012-01-17 15 views

Respuesta

15

Lo que puede hacer es abrir su segunda ventana y asignarle la ventana principal como su propietario. Luego, desde la ventana modal, llamar a la propiedad Owner, convertirla en un objeto MainWindow y podrá ejecutar el método.

// Code in main window 
ModalWindow window = new ModalWindow(); 
window.Owner = this; 
window.ShowDialog() 

//Code on the modal window 
var myObject = this.Owner as MainWindow; 
myObject.MyMethod(); // Call your method here. 
+0

me sale esto: "No se puede establecer la propiedad del propietario de una ventana que no se ha demostrado previamente". Parece que window.Owner no puede preceder ShowDialog ... – pzogr

2

Hay muchas maneras de hacerlo.

Puede sobrecargar el constructor de la ventana modal para que pueda pasar una referencia a esa función, o la ventana principal. O bien, agregue una propiedad a esa ventana.

También puede iniciar el temporizador en la línea siguiente en el código de la ventana principal que muestra la ventana modal.

2
  • Si esta ventana modelo se abrirá desde el MainWindow, como esto digamos

    modalWindow.ShowDialog()

    es suficiente con añadir el código después de esta llamada y se ejecuta después de la ventana modal cerrada.

  • Si la ventana modal se abre la forma en otro lugar, pero en el cierre debe ejecutar el código en la parte no relacionada complitely, se puede utilizar, por ejemplo, Commands o RelayCommand (tipo de llamada directa delegado).

Espero que esto ayude.

0

Puede adjuntar un controlador de eventos al evento "Cierre" del cuadro de diálogo modal, que se ejecutará en el programa principal cuando el cuadro de diálogo active este evento.

5
public class ModalWindow : Window 
{ 
    private MainWindow _parent; 
    public ModalWindow(MainWindow parent) 
    { 
     _parent = parent; 
     Owner = parent; 
    } 

    void CallParent() 
    { 
     _parent.Call(); 
    } 
} 

Yo sugeriría que este tipo de patrón es un olor a código.

Si su objetivo es pasar información del modal al principal, mejor exponer las propiedades en la ventana modal y, después de que se cierra, leer esos valores y realizar las acciones necesarias en el elemento primario.

Si su objetivo es pasar información de los padres a la modal, luego pasarlo al constructor o propiedades públicas antes de llamar ShowDialog().

Cuestiones relacionadas