LogicSoft.com.pl - systemy informatyczne

Konwersja danych w XAML - IValueConverter

Uwaga, otwiera nowe okno. PDFDrukujEmail

Artykuł ten jest kontynuacją wcześniejszego, opisującego bindowanie danych w XAML. Tym razem postaram się przedstawić sposób konwersji danych z jednego typu na inny za pomocą interfejsu IValueConverter.

Importując projekt z wcześniejszego artykułu będziemy posiadać kontrolkę ListView wyświetlającą w oknie głównym aplikacji podstawowe dane napisanej wcześniej klasy Person. Poniższy zrzut ekranu prezentuje wynik poprzedniego artykułu.

Co się jednak stanie, jeżeli będziemy chcieli otrzymać dane w innej postaci?... Nic. Istnieje łatwy sposób - użycie dodatkowych właściwości wcześniej zadeklarowanych w klasie Person. Jest jednak jeszcze inny - łatwiejszy sposób. Interfejs IValueConverter - którego obsługa przy pomocy Visual Studio jest banalnie prosta.
Pierwsze, co należy zrobić, to dodać nowy element do naszego projektu - a konkretniej Value Converter (można też dodać zwykłą klase i zaimportować interfejs IValueConverter).

W ramach tego artykułu będe chciał dodać dodatkową kolumnę w kontrolce ListView wyświetlającą odpowiedni tekst w zależności od wieku osoby. Interesuje nas tylko konwersja w jedną stronę, dlatego wykorzystam tylko funkcję Convert. Poniżej znajduje się kod konwertera.

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is int)
{
int wiek = (int)value;
if (wiek > 0 && wiek < 18) return "Dziecko";
else if (wiek >= 18 && wiek < 55) return "Dorosły";
else if (wiek >= 55) return "Osoba starsza";
}
return null;
}

Kolejnym krokiem jest zadeklarowanie w kodzie XAML, że będziemy korzystać z przestrzeni nazw tego projektu.





]]>

Najczęściej w tym momencie należy przebudować projekt (nacisnąć F6), aby Intellisense domyślił się, że korzystamy z tej przestrzeni nazw. Kolejnym krokiem jest zadeklarowanie w zasobach okna wykorzystywanie wyżej napisanego konwertera.

]]>
]]>
]]>

Ważnym elementem tutaj jest część x:Key odpowiedzialna za klucz zasobu, który później będzie używany w kodzie. Ostatnim krokiem jest dodanie kodu XAML do kontrolki ListView, którego zadaniem jest wyświetlanie dodatkowej kolumny z nagłowkiem "Jaka osoba" konwertującej właściwość Age klasy Person.

]]>
]]>
]]>
]]>
]]>
]]>
]]>

Nie różni się to od zwykłego bindowania oprócz jednego elementu - Converter, który deklaruje użycie konwertera o nazwie KonwerterWieku dla właściwości Age. Efekt powyższych działań powinien być podobny do załączonego na poniższym obrazku.

W razie jakichkolwiek pytań, zapraszam do działu kontakt.