Czym jest konwerter
Budując aplikacje na bazie WPFu, mamy do dyspozycji wiele ciekawych możliwości ominięcia pisania tak zwanego kodu „code-behind„. W celu wiązania danych z widokiem wykorzystujemy Bindowanie (łączenie właściwości kontrolek z przypisanym do widoku kontekstem danych DataContext).
Niemniej jednak zdarza się, iż wyświetlanie danych w takiej postaci jest nie wystarczające np. chcemy przy pomocy zmiennej bool ustawić widoczność kontrolki która przyjmuje właściwości typu Visibility (Collapsed, Hidden, Visible). W takiej sytuacji z pomocą przychodzi nam konwerter, dzięki któremu możemy dokonać transformacji: bool -> Visibility.
Implementacja
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
namespace GUITests.Converters
{
[ValueConversion(typeof(bool), typeof(Visibility))]
public class BoolToVisiblityConverter : IValueConverter
{
public object Convert(
object value,
Type targetType,
object parameter,
CultureInfo culture)
{
var isVisible = (bool)value;
return isVisible ? Visibility.Visible : Visibility.Hidden;
}
public object ConvertBack(
object value,
Type targetType,
object parameter,
CultureInfo culture)
{
var isVisible = (Visibility)value;
return isVisible == Visibility.Visible;
}
}
}
Konwerter posiada dwie składowe metody jakie implementuje z interfejsu IValueConverter:
- Convert - jest używana w przypadku konwersji z typu źródłowego na docelowy, może przyjmować parametry. Właśnie w tej metodzie dokonujemy transformacji bool na Visibility. Wartość zwracana jest w miejscu użycia w kontrolce.
- ConvertBack - alternatywna operacja, jeżeli chcemy wykonać wsteczną konwersję z typu Visibility na bool, działa bardzo podobnie jedynie jest inna transformacja danych.
Użycie
Deklaracja i użycie konwertera.
1
2
3
4
5
6
7
8
9
<Window.Resources>
<ResourceDictionary>
<local:BoolToVisibilityConverter x:Key="boolToVisibilityConverter" />
</ResourceDictionary>
</Window.Resources>
<Button Visibility="{Binding Path=Visible, Mode=TwoWay,
Converter={StaticResource boolToVisibilityConverter},
ConverterParameter=params}"/>
W celu użycia konwertera należy go załadować do zasobów okna (linie 1 - 5).
Kolejna pozycja to użycie konwertera (linia 7 - 9), poprzez bindowanie.
Parametry użycia:
- Path - określa źródło danych w DataContext, na te wartości typu bool będzie reagował konwerter BoolToVisibilityConverter,
- Mode - typ wiązania, TwoWay, oznacza wiązanie w dwie strony, cczyli zapis i odczyt właściwości,
- Converter - definicja konwertera, należy określić iż pochodzi ze statycznych zasobów, jego nazwę,
- ConverterParameter - w razie potrzeby można przekazać parametry do konwertera.
Tak przygotowany konwerter można wielokrotnie wykorzystywać w aplikacjach.
Jest to post przygotowany na potrzeby konkursu „Daj Się Poznać 2017” organizowanym przez Macieja Aniserowicza.
Blog | https://mrdev.pl |
Projekt | https://mrdev.pl/pictogr-pomysl |
GitHub | github.com/krzysztofowsiany/pictogr |
Snapchat | www.snapchat.com/add/gocom7 |
www.facebook.com/PictOgr-1729700930654225 | |
twitter.com/gemu_gocom | |
RSS | http://mrdev.pl/category/daj-sie-poznac-2017/feed |