Durch das System von Data Binding kann man ganz einfach seine Properties aus den ViewModels an die View binden. Manchmal liegen die Daten aber nicht im gewünschten Format vor und daher kann man ganz einfach Converter schreiben, welche die Daten von Typ A in Typ B umwandelt. Dies ist nun der erste Teil, wo ich ein paar einfache Converter teilen möchte, welche meist in allen meinen App-Projekten zu finden sind. Die Syntax ist hierbei für Xamarin.Forms Apps, sollte aber leicht für UWP oder auch WPF angepasst werden können. In diesem Artikel nun ein paar weitere nützliche Converter, welche in fast allen mobilen Applikationen vorkommen.
Jeder Converter muss das Interface IValueConverter
implementieren und damit die Methoden Convert
und ConvertBack
. In den meisten Fällen möchte man die Daten aus dem ViewModel für die View anpassen und daher reicht es aus nur die Convert
-Methode zu implementieren.
Beginnen möchte ich mit einem BoolToColorConverter
. Die Besonderheit bei diesem Converter ist, dass man ihm zwei Farbwerte übergeben kann, welche dann anhand eines booleschen Wertes zurückgegeben wird. Dies ist zum Beispiel bei einer Fehlervalidierung interessant, da man entweder den Text in der Standard-Textfarbe oder beispielsweise in Rot bei einem Validierungsfehler darstellen kann.
public class BoolToColorConverter : IValueConverter
{
public Color TrueColor { get; set; }
public Color FalseColor { get; set; }
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
if (value is bool boolValue)
return boolValue ? TrueColor : FalseColor;
return Color.Transparent;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Um den Converter nun zu verwenden, verwendet man das folgende Snippet und passt einfach die Farben entsprechend an.
<BoolToColorConverter x:Key="BoolToColorConverter"
FalseColor="Black"
TrueColor="Red" />
Der nächste Converter erscheint auf dem ersten Blick nutzlos, aber dies ist er auf keinen Fall, gerade am Anfang der Entwicklung: der DebugConverter
. Dieser macht eigentlich nicht viel außer den übergebenden Value direkt wieder zurückzugeben. Dies ist zum Beispiel dann sinnvoll, wenn man einmal überprüfen möchte, was beim Binding eigentlich übergeben wird, denn innerhalb der Convert
-Methode kann man einfach einen Breakpoint setzen.
public class DebugConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
return value;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
return value;
}
}
Als letzten Converter in diesem Beitrag möchte ich den ByteArrayToImageSourceConverter
vorstellen. Wie der Name bereits vermuten lässt, wird hier ein Byte-Array in eine ImageSource
konvertiert. Meist bekommt man ein Bild über eine API als Byte-Array geliefert und möchte dieses nun in der App darstellen.
public class ByteArrayToImageSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
if (value is byte[] imageBytes)
return ImageSource.FromStream(() => new MemoryStream(imageBytes));
return null;
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Dies ist der zweite Teil meiner kleinen Converter-Sammlung. Aber keine Angst ich habe noch zahlreiche weitere nützliche Converter zur Hand und werde in regelmäßigen Abständen immer mal wieder ein paar davon in meinem Blog vorstellen. Solltet ihr aber auch noch weitere Converter in fast allen euren Projekten verwenden, könnt ihr mir diese gerne in die Kommentare schreiben.