.NET GUI

.NET Community rund um alle Graphical User Interface (GUI) Themen.
Willkommen bei .NET GUI. Anmeldung | Registrieren | Hilfe | Impressum | Forumsregeln
in Suchen

WPF DataBinding und das Formatieren nach Lust und Laune

Letzter Beitrag 04-24-2008 17:39 von joachimk. 0 Antworten.
Seite 1 von 1 (1 Treffer)
Beiträge sortieren: Zurück Weiter
  • 04-24-2008 17:39

    • joachimk
    • Top 25 Mitwirkender
      Männlich
    • Registriert am 04-11-2008
    • Salzburg, Austria
    • Beiträge 25
    • Punkte 396

    WPF DataBinding und das Formatieren nach Lust und Laune

    WPF bietet tolle Möglichkeiten Objekte direkt an graphische Elemente zu binden. So kann man beispielsweise eine Liste von Customer-Objekten als DataContext an eine ListView übergeben und muss sich sonst um nichts mehr kümmern.

    Im folgenden Beispiel wird eine Liste von Customer-Objekten einer ListView übergeben:



    Was wenn man nun gewisse Properties eines Objektes anders anzeigen möchte als es die ToString() Methode vorgibt, muss man diese entweder überschreiben oder dies auf eine andere (elegantere) Methode lösen.

    Dazu bietet WPF ein Interface namens IValueConverter.

    public interface IValueConverter
    {
    public object Convert( object value,
    Type targetType,
    object
    parameter,System.Globalization.CultureInfo culture);

    public object ConvertBack(object value,
    Type targetType,
    object parameter, System.Globalization.CultureInfo culture);
    }
    Mit einer Klasse die dieses Interface implementiert kann man nun so ziemlich alles mit den Werten anstellen, was man möchte.
    Man könnte das Geburtsdatum anstelle der DateTime Repräsentation auch als Base64-string anzeigen lassen.
    Dazu erstellen wir folgenden Converter:

    public class Base64Converter : IValueConverter
    {
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
    return System.Convert.ToBase64String(Encoding.ASCII.GetBytes(value.ToString()));
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
    return Encoding.ASCII.GetString(System.Convert.FromBase64String(value.ToString()));
    }

    #endregion }

    Dann fügen wir den Namespace unserem Window hinzu:

    <Window x:Class="CustomValueConverter:WIndow1" 
    ...
    xmlns:converters="clr-namespace:CustomValueConverter.Converter">


    Als nächstes erstellen wir unseren Converter in den Resourcen des Fensters:

    ...
    <Window.Resources>
    <converter:Base64Converter x:Key="base64"/> </Window.Resources>
    ...


    Und von nun an können wir den Converter überall dort wo wir DataBinding verwenden einsetzen. zum Beispiel:

    ...
    <TextBlock Text="{Binding Path=Birthday,Converter={StaticResource base64}}"/> ...


    was folgendes Ergebnis bringt:



    An Klassen die IValueConverter implementieren kann man auch Parameter direkt aus XAML übergeben. Dies ist sehr hilfreich wenn man z.b. ein DateTime in einem eigenen Format darstellen will.
    Dazu ändern wir die Convert()-Methode  wie folgt:

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
    return ((DateTime)value).ToString((string)parameter);
    }

    Nun wird das DateTime nach dem string den wir als Parameter angeben formatiert.

    In XAML werden die Parameter für den Converter wie folgt deklariert:

    <TextBlock Text="{Binding Path=Birthday,
    Converter={StaticResource parameterized},
    ConverterParameter='dd@MM@yyyy'}"
    />

    was folgendes Ergebnis liefert:



    Natürlich können ValueConverter beliebige Objekte in beliebige Repräsentationen umgewandelt werden. Eingeschränkt ist man hier nur durch den eigenen Einfallsreichtum.

    Die ConvertBack()-Methode von IValueConverter dient dazu Werte aus der konvertierten Darstellung zurück in die Originalform zu bringen. Dies ist insbesondere dann notwendig wenn Properties auf TextBoxen oder ähnliche veränderbare Controls gebunden werden.





    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
Seite 1 von 1 (1 Treffer)
Powered by Community Server (Commercial Edition)    Hosting powered by 69° media solutions