[WPF] Przekazywanie zmiennych między oknami

0

Witam, staram się zrozumieć przekazywanie wartości zmiennych między okanmi.
Mam Main Window i z niego wywołuje Okno1, które uzupełnia mi się pobranymi z sql danymi z warunkiem określonym w MainWindow.
I w Okno1 mam TextBoxy do którego trafiają dane osoby. M.in. kod pocztowy. I zdefinowałem sobie akcję na podwójne kliknięcie w Textbox Kodu pocztowego, które otwiera mi Okno2 w, którym z grida mogę wybrać interesujący mnie kod pocztowy (grid uzupełnia się z bazy).
I mam przycisk który ma pobrać zmienną kodu pocztowego (i chciałbym aby przepisał do okna rodzica) i wstawił do TextBox'u.

        public void KodSet_Button_Click(object sender, RoutedEventArgs e)
        {
            foreach (DataRowView row in GridKody.SelectedItems)
            {
                KodP = row.Row.ItemArray[0].ToString();
            }
            MessageBox.Show("KodyPocztowe(92): " + KodP);       
            this.Close();
        }

MessageBox pokazuje mi wybrany kod, ale już nie mam pomysłu na wstawienie zmiennej KodP z Okna2 do Okna1.
Proszę o pomoc, za co z góry dziękuje.

0

Aż taki głupi, żeby do Googla wpisać takie zapytanie to ja nie jestem!
Większość z tych tematów przeczytałem, ale dalej nie wiem jak z wywołanego z Window1: Window2 przenieść wartość do okna rodzica.

0

To może bądź mądry na tyle, żeby kliknąć na jeden z otrzymanych linków, a potem przeczytać ze zrozumieniem treść? Problem jest banalny i tak częsty, że na na samym 4p znajdziesz kilkadziesiąt takich pytań wraz z odpowiedziami. Część z nich widzisz w ramce po prawej stronie od mojego posta. Czy jest coś, co przeszkadza Ci przeczytać jedną z tych pozycji, zrozumieć ideę i zastosować ją u siebie?

0

Masz kilka możliwości:

  • Zapinasz obiekty, które podlegają zmianom w oknie potomnym w jakąś klasę i przekazujesz ją przez konstruktor okna. Klasa jest typem referencyjnym więc zmiany wewnątrz takiego obiektu powinny być widoczne we wszystkich "wskaźnikach" na niego. Jeżeli tych obiektów nie jest dużo to możesz pominąć zapinanie tego w osobną klasę i przekazać bezpośrednio przez konstruktor ale pod warunkiem, że obiekt jest typu referencyjnego!
  • Robisz singletona (generycznego najlepiej, bo będzie wtedy uniwersalny) i do niego wrzucasz dane, które chcesz zmienić. Odczytujesz te dane w oknie potomnym po czym zapisujesz do tego singletona - okno rodzic widzi zmiany.
  • Korzystasz z wzorca mediator, który robi coś podobnego do tego singletona.
  • Korzystasz z wzorca obserwator, implementowanego w .Net'cie przez interfejsy IObservable<T> oraz IObserver<T>.
0

Czy to twoje drugie okno jest oknem modalnym? Jeżeli tak to umieść we właściwościach publicznych co potrzebujesz i potem w oknie głównym te właściwości odczytaj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1