2010-08-12 5 views
29

J'ai une fenêtre qui affiche une autre fenêtre. Je veux que la deuxième fenêtre puisse retourner un objet à la première fenêtre quand un bouton est pressé. Comment ferais-je cela?Valeur de retour de fenêtre WPF

+0

est la nouvelle fenêtre modale de la première fenêtre? – Robaticus

+0

Au début, je ne savais même pas ce qu'une fenêtre modale était mais je l'ai compris. Le code de Thomas ci-dessous avec une légère modification a fonctionné. – Reflux

Répondre

43

Vous pouvez exposer une propriété sur la deuxième fenêtre, afin que la première fenêtre puisse la récupérer.

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

Cela ne fonctionne pas parce que l'utilisateur interagit avec la fenêtre et appuie sur un bouton avant que je veux que la fenêtre parente obtienne la valeur. – Reflux

+3

Je l'ai compris. Le problème était qu'il devrait être if (w.ShowDialog() == false). – Reflux

+0

@Reflux: êtes-vous sûr? ShowDialog renvoie false lorsque l'utilisateur annule la boîte de dialogue, donc vous ne voulez probablement pas prendre en compte la valeur dans ce cas –

17

Si vous ne voulez pas exposer une propriété, et que vous voulez faire l'usage un peu plus explicite, vous pouvez surcharger ShowDialog:

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

Je sais que c'est un ancien, mais je cherchais la même information pour une application WPF sur laquelle je travaille. J'ai trouvé ce site pour être vraiment utile:

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

Ceci est écrit pour Windows Forms, mais si vous ignorez la partie sur les valeurs de passer à la nouvelle fenêtre, il travaillait encore et avait quelques informations vraiment bon.

Sur une note côté, pour transmettre des valeurs à la nouvelle fenêtre, c'était vraiment utile:

WPF passing string to new window

+1

Bienvenue dans StackOverflow. Alors que les liens que vous avez fournis peuvent être utiles, il est toujours préférable de mettre directement les points principaux à votre message. De cette façon, votre réponse ne devient pas inutile si un lien est brisé et est également plus facile à utiliser et plus utile. Donc, je recommande d'éditer votre réponse en conséquence. Meilleures salutations – YakovL

Questions connexes