
Der IValueConverter ist eine zentrale Schnittstelle in WPF, um Daten zwischen ViewModel und View gezielt zu transformieren. Er liegt zwischen Binding-Source und Binding-Target und unterstützt beide Richtungen: Convert (Source → Target) und ConvertBack (Target → Source). So lassen sich Werte für die Darstellung im Frontend aufbereiten, ohne das ViewModel anzupassen.
Am Beispiel einer Monatsansicht zeigt der Beitrag, wie zwei Converter die Darstellung steuern: Der BoldIfCurrentMonthConverter hebt Tage des aktuellen Monats durch fette Schrift hervor, der GreyOutIfNotCurrentConverter graut Tage außerhalb des Monats aus. Zu beachten ist, dass übergebene Werte auch null sein können. Eingebunden werden die Converter über die XAML-Ressourcen.
Ein häufiges Problem in der Softwareentwicklung besteht darin, dass Daten aus dem Backend nicht in der Form vorliegen, in der sie im Frontend angezeigt oder dargestellt werden sollen. In WPF lässt sich beispielsweise ein Wert im ViewModel manchmal nicht so darstellen, wie er vorliegt. Mithilfe des IValueConverters lässt sich eine Converter-Klasse erstellen, die die Werte entsprechend übersetzt.
Der IValueConverter ist eine Standard-Schnittstelle in WPF für Value-Transformationen in Bindings. Der Converter liegt zwischen Binding-Source und Binding-Target und unterstützt zwei Richtungen:
Dabei ist zu beachten, dass der Wert, der an den Converter übergeben wird, auch null sein kann.
Dieser Abschnitt veranschaulicht den Einsatz des IValueConverters in einer Monatsansicht. In der Monatsansicht sind die Tage, die zum ausgewählten Monat gehören, fett dargestellt, während die Tage, die nicht im Monat liegen, ausgegraut sind.

Der BoldIfCurrentMonthConverter stellt die Schrift fett dar. Er implementiert den IValueConverter und gibt ein FontWeight zurück.
1public class BoldIfCurrentMonthConverter : IValueConverter
2{
3 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
4 {
5 bool isInMonth = value is bool b && b;
6 return isInMonth ? FontWeights.Bold : FontWeights.Normal;
7 }
8
9public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new NotImplementedException();
10}
Der GreyOutIfNotCurrentConverter sorgt dafür, dass Tage, die nicht im Monat liegen, ausgegraut werden. Er gibt einen Brush (eine Farbe) zurück.
1public class GrayOutIfNotCurrentConverter : IValueConverter
2{
3 public Brush InMonthBrush { get; set; } = Brushes.Black;
4 public Brush OutMonthBrush { get; set; } = Brushes.Gray;
5
6 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
7 {
8 bool isInMonth = value is bool b && b;
9 return isInMonth ? InMonthBrush : OutMonthBrush;
10 }
11
12 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
13 => throw new NotImplementedException();
14}
Die Converter müssen in den Ressourcen angegeben werden.
1<UserControl.Resources>
2 <viewModel:SimpleMonthViewModel x:Key="SimpleMonthViewModel" />
3 <converters:BoldIfCurrentMonthConverter x:Key="BoldIfCurrentMonthConverter"/>
4 <converters:GrayOutIfNotCurrentConverter x:Key="GrayOutIfNotCurrentConverter"/>
5</UserControl.Resources>
Anschließend lassen sie sich an der entsprechenden Stelle einbinden.
1<TextBlock Text="{Binding Datum, StringFormat={}{0:dd}}"
2 HorizontalAlignment="Center"
3 VerticalAlignment="Center"
4 FontWeight="{Binding IsInCurrentMonth, Converter={StaticResource BoldIfCurrentMonthConverter}}"
5 Foreground="{Binding IsInCurrentMonth, Converter={StaticResource GrayOutIfNotCurrentConverter}}"/>
Der IValueConverter ist vielseitig einsetzbar und eine große Hilfe, wenn es um speziellere Darstellungen in WPF geht oder Werte umgewandelt werden müssen.

Praxiswissen, Tipps und Neuigkeiten für den Mittelstand: kompakt und ohne Spam. Abmelden jederzeit möglich.
Praxiswissen, Tipps und Neuigkeiten für den Mittelstand: kompakt und ohne Spam. Abmelden jederzeit möglich.