2011-10-26 12 views
6

Tengo dos ventanas WPF. Una es la ventana principal y la otra es alguna ventana de configuración. Me gustaría que la ventana de configuración envíe y evento a la ventana principal. ¿Alguna idea de cómo lo logro?Evento de envío entre 2 ventanas WPF

Éste es cómo crear y abrir la ventana de configuración:

private void MenuItem_Click(object sender, RoutedEventArgs e) 
    { 
     ConfigPage Confwin= new ConfigPage(); 
     Confwin.Owner = this; 
     Confwin.Show(); 
    } 
+0

¿quién está creando la ventana de configuración? ¿Estás usando MVVM? – sll

Respuesta

15

Se puede definir cualquier evento en su clase de ventana secundaria y suscribirse a él antes de mostrar la ventana.

ventana principal

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     this.Loaded += new RoutedEventHandler(MainWindow_Loaded); 
    } 

    void MainWindow_Loaded(object sender, RoutedEventArgs e) 
    { 
     Child childWindow = new Child(); 
     childWindow.MyEvent += new EventHandler(childWindow_MyEvent); 

     childWindow.ShowDialog(); 
    } 

    void childWindow_MyEvent(object sender, EventArgs e) 
    { 
     // handle event 
     MessageBox.Show("Handle"); 
    } 
} 

ventana secundaria

public partial class Child : Window 
{ 
    // define event 
    public event EventHandler MyEvent; 

    protected void OnMyEvent() 
    { 
     if (this.MyEvent != null) 
      this.MyEvent(this, EventArgs.Empty); 
    } 

    public Child() 
    { 
     InitializeComponent(); 

     this.Loaded += new RoutedEventHandler(Child_Loaded); 
    } 

    void Child_Loaded(object sender, RoutedEventArgs e) 
    { 
     // call event 
     this.OnMyEvent(); 
    } 
} 
+2

Muy bonita y limpia. También código muy simple para comprender la estructura básica del manejo de eventos. +1 de mí ... – phil13131

+1

También quería dar unas gracias rápidas, esto me ayudó a entender los conceptos básicos de la configuración de mis propios controladores de eventos, otro +1. – unrealtrip

2

Se debe utilizar el patrón de eventos débil. Está integrado si usa Prism o MVVMLight.

De lo contrario, tendrá que aplicar por sí mismo: msdn

La razón de esto, es que se desacopla la ventana de configuración de la ventana principal.
No deberían conocerse para que la ventana de configuración sea reutilizable (y cualquier objeto vivo en su aplicación también puede escuchar el evento).

+0

+1 buen punto, el prisma parece prometedor – walter

Cuestiones relacionadas