Konwersja danych w XAML - IValueConverter
Dodany: 10:22, czwartek, 16 grudnia 2010
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.
{
{
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.



