2010-08-12 20 views
29

Mam okno, które powoduje otwarcie innego okna. Chcę, aby drugie okno mogło zwrócić obiekt do pierwszego okna po naciśnięciu przycisku. Jak to zrobić?Wartość zwracana okna WPF

+0

Czy nowe okno modalne do pierwszego okna? – Robaticus

+0

Na początku nawet nie wiedziałem, co to jest okno modalne, ale doszedłem do tego. Kod Thomas'a z niewielką zmianą działał. – Reflux

Odpowiedz

43

Możesz odsłonić właściwość w drugim oknie, tak aby pierwsze okno mogło ją odzyskać.

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

To nie działa, ponieważ użytkownik wchodzi w interakcję z oknem i naciska przycisk, zanim chcę, aby okno nadrzędne odebrało wartość. – Reflux

+3

Rozgryzłem to. Problem polegał na tym, że (w.ShowDialog() == false). – Reflux

+0

@Reflux: jesteś pewien? ShowDialog zwraca wartość false, gdy użytkownik anuluje okno dialogowe, więc prawdopodobnie nie chcesz wziąć pod uwagę wartości w tym przypadku. –

17

Jeśli nie chcesz narazić właściwość, a chcesz, aby korzystanie trochę bardziej wyraźne, można przeciążać ShowDialog:

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

wiem, że to jest stary, ale szukałem tych samych informacji dla aplikacji WPF, nad którą pracuję. Znalazłem to miejsce, aby być naprawdę pomocne:

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

To jest napisane dla Windows Forms, ale jeśli pominąć część o przekazywanie wartości do nowego okna, to nadal pracował i miał kilka naprawdę dobrych informacji.

Na marginesie, aby przekazać wartości do nowego okna, to było bardzo pomocne:

WPF passing string to new window

+1

Witamy w StackOverflow. Chociaż podane linki mogą być pomocne, zawsze lepiej jest umieścić główne punkty w swoim wpisie bezpośrednio. W ten sposób twoja odpowiedź nie staje się nieistotna, jeśli link zostanie zerwany, a także łatwiejszy w użyciu i bardziej pomocny. Dlatego zalecam odpowiednią edycję odpowiedzi. Z poważaniem – YakovL