Dziś dokończenie poprzedniej części traktującej o Page based navigation. Dziś temat dotyczący przekazywania danych pomiędzy stronami.

Oj dana, dana, dana…

Informację do strony możemy przekazać na trzy sposoby. Pierwszy z nich to wykorzystując przeładowaną metodę Navigate, która jako drugi argument przyjmuje argument typu object.

NavigationService.Navigate(“Page1.xaml”, 12);

natomiast odczytać możemy go za pomocą eventu LoadCompleted.

NavigationService.LoadCompleted += NavigationService_LoadCompleted;

void NavigationService_LoadCompleted(object sender, NavigationEventArgs e)

{

    if (e.ExtraData == null) return;

    //zrób coś z wartością

}

Wiadomo wadą takiej metody jest brak silnego typowania. W bardzo prosty sposób, możemy jednak to silne typowanie uzyskać:

var page = new Page1(12);

NavigationService.Navigate(page);

Prawda, że proste? Jest jednak jeszcze 3 nowe rozwiązanie.

Page functions

Jest to nowość, która została dodana do WPF’a a głównym jej zadaniem jest lepsze wsparcie sytuacji strony ustawień, która działa na zasadzie pokazanie strony ustawień, zmiana ich i powrót do poprzedniej strony. Pogrubiłem fragment dotyczący powrotu, gdyż to jest najistotniejszy właściwość PageFunctions. Mianowicie, potrafią one zwracać wartość.

PageFunction tak naprawdę nie różni się znacząco od Page (dziedziczy po niej) i jedyną widoczną w XAML’u różnicą (poza oczywiście tagiem głównym) jest definicja zwracanego typu.

<PageFunction

  xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”

  xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”

  xmlns:sys=”clr-namespace:System;assembly=mscorlib”

  x:Class=”WpfExamDemo.PageFunction1″

  x:TypeArguments=”sys:String

  Title=”PageFunction1″>

Jak łatwo zauważyć w powyższym przykładzie nasza funkcja będzie zwracać łańcuch znaków. Aby uzyskać dostęp do zwracanej przez tę funkcję wartości musimy podpiąć się pod zdarzenie Return:

var pageFunction = new PageFunction1();

pageFunction.Return += pageFunction_Return;

i odczytać wartość za pomocą właściwości Result. Dane możemy zwrócić poprzez wywołanie OnReturn z obiektem typu ReturnEventArgs.

OnReturn(new ReturnEventArgs<string>(“string”));

Tyle na dziś. W kolejnym odcinku – Configure Application Settings.