2010-08-12 16 views
29

Tengo una ventana que muestra otra ventana. Quiero que la segunda Ventana pueda devolver un objeto a la primera Ventana cuando se presiona un botón. ¿Cómo haría esto?Valor de retorno de ventana WPF

+0

es la nueva ventana modal a la primera ventana? – Robaticus

+0

Al principio, ni siquiera sabía qué era una ventana modal, pero lo descubrí. El código de Thomas a continuación con una ligera edición funcionó. – Reflux

Respuesta

43

Puede exponer una propiedad en la segunda ventana para que la primera ventana pueda recuperarla.

public class Window1 : Window 
{ 
    ... 

    private void btnPromptFoo_Click(object sender, RoutedEventArgs e) 
    { 
     var w = new Window2(); 
     if (w.ShowDialog() == true) 
     { 
      string foo = w.Foo; 
      ... 
     } 
    } 
} 

public class Window2 : Window 
{ 
    ... 

    public string Foo 
    { 
     get { return txtFoo.Text; } 
    } 

} 
+1

Eso no funciona porque el usuario interactúa con la ventana y presiona un botón antes de querer que la ventana principal obtenga el valor. – Reflux

+3

Lo descubrí. El problema era que debería ser si (w.ShowDialog() == falso). – Reflux

+0

@Reflux: ¿estás seguro? ShowDialog devuelve falso cuando el usuario cancela el diálogo, por lo que probablemente no desee tener en cuenta el valor en ese caso –

17

Si no desea exponer una propiedad, y quiere hacer el uso de un poco más explícita, se puede sobrecargar ShowDialog:

public DialogResult ShowDialog(out MyObject result) 
{ 
    DialogResult dr = ShowDialog(); 
    result = (dr == DialogResult.Cancel) 
     ? null 
     : MyObjectInstance; 
    return dr; 
} 
0

Sé que esto es un viejo, pero estaba buscando la misma información para una aplicación WPF en la que estoy trabajando. He encontrado este sitio para ser realmente útil:

http://www.dreamincode.net/forums/topic/206458-the-right-way-to-get-values-from-form1-to-form2/

Esto está escrito para Windows Forms, pero si se ignora la parte acerca de pasar los valores de la nueva ventana, todavía funcionaba y tenía algunos realmente buena información.

En una nota lateral, para pasar valores a la nueva ventana, esto fue realmente útil:

WPF passing string to new window

+1

Bienvenido a StackOverflow. Si bien los enlaces que proporcionó pueden ser útiles, siempre es mejor poner los puntos principales en su publicación directamente. De esta forma, su respuesta no se vuelve irrelevante si un enlace se rompe y también es más fácil de usar y más útil. Entonces recomiendo editar tu respuesta en consecuencia. Atentamente – YakovL