MR. Dev

Blog programistyczny.

WPF - własny konwerter.

Czym jest konwerter

WPF - własny 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: WPF - własny konwerter.

  • 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.


Daj Się Poznać 2017

Jest to post przygotowany na potrzeby konkursu „Daj Się Poznać 2017” organizowanym przez Macieja Aniserowicza.

Blog http://mrdev.pl
Projekt http://mrdev.pl/pictogr-pomysl
GitHub github.com/krzysztofowsiany/pictogr
Snapchat www.snapchat.com/add/gocom7
Facebook www.facebook.com/PictOgr-1729700930654225
Twitter twitter.com/gemu_gocom
RSS http://godev.gemustudio.com/category/daj-sie-poznac-2017/feed