Prosty dialog w WPF – ShowDialog i DataBinding

Posted: 8 stycznia 2013 in Programowanie
Tagi: , , , ,
WPF czasami sprawy ułatwia, a czasami utrudnia. Bez wątpienia jest jednak ładny 🙂

Dzisiaj chciałbym pokazać jak zrobić prosty dialog, który wywołujemy w programie aby umożliwić użytkownikowi wpisanie jakiegoś tekstu. Setki razy realizowałem takie zadanie w MFC czy WindowsForms – dziś czas na WPF.

Samo wywołanie dialogu nie różni się znacząco od innych technologii. Tworzymy instancję klasy dialogu i wywołujemy „ShowDialog”:

ManualAddFunction dlg = new ManualAddFunction();
dlg.ShowDialog();

Pobranie informacji w jaki sposób użytkownik zakończył dialog (OK, CANCEL) jest już bardziej złożone. Bowiem jako wynik uzyskujemy nie tyle „czystego” bool-a, co ?bool – w praktyce oznacza to że dialog może mieć stan nie określony (ni true ni false) – co wymaga od nas sprawdzenia czy w ogóle występuje jakaś odpowiedź i jeżeli tak, to dopiero możemy sprawdzić jej stan:

if (dlg.DialogResult.HasValue && dlg.DialogResult.Value)

Od strony klasy okienka reakcja na wciśnięcie klawisza „OK” może wyglądać następująco:

DialogResult = true;
Close();

No dobra. Ale jak skojarzyć kontrolkę z danymi i w końcu jak ją pobrać ? WPF i mechanizm DataBinding (łączenie kontrolki z danymi) jest tu jak najbardziej pomocny, ponieważ umożliwia ograniczenie ilości obsługiwanych zdarzeń i pozwala „flakom” .NET na zrobienie roboty za nas. W kodzie programu musimy stworzyć „property” które powiążemy z XAML i przez które pobierzemy dane z zewnątrz dialogu. Najprościej tak:

public string Label { get; set; }

Musimy jeszcze powiązać XAML z klasą (wskazać źródło danych). Możemy w konstruktorze zrobić to jedną linijką (główny grid okienka jest w XAML nazwany grud1):

grid1.DataContext = this;

i powiązać nasz textbox z własnością klasy po stronie XAML np. w następujący sposób:

TextBox Text="{Binding Path=FunctionGroup}"



Reklamy

Możliwość komentowania jest wyłączona.