Weiterführende Themen: Konvertieren zwischen Datentypen
Ein Wertkonverter ist eine bequeme Möglichkeit, Daten von einem Typ in einen anderen zu konvertieren. Wenn Sie einen Eigenschaftenwert eines Objekts in Microsoft Expression Blend an einen Datenwert oder einen anderen Eigenschaftwert binden, müssen die Datenwerte übereinstimmen. Beispiel: Sie möchten eine Zeichenfolge wie etwa "123" in den entsprechenden ganzzahligen Wert für einen Slider oder eine Eigenschaft wie Visibility.Hidden in einen booleschen Wert wie false konvertieren.
Ein Wertkonverter implementiert die IValueConverter-Schnittstelle im Code in eine Microsoft .NET Framework-Klasse. Die Convert- und die ConvertBack-Methode müssen implementiert werden, da das Datenbindungsmodul diese Methoden beim Verschieben eines Werts zwischen der Bindungsquelle und dem Bindungsziel aufruft. Weitere Informationen finden Sie unter IValueConverter Interface auf MSDN.
Um einen Wertkonverter anzuwenden, füllen Sie beim Binden von Daten an eine Eigenschaft das Feld Wertkonverter im Dialogfeld Datenbindungerstellen aus.
So erstellen Sie eine Wertkonverterklasse
Dieses Verfahren ist ein Beispiel für eine in C# geschriebene .NET-Klasse, die einem Projekt nur dann zugewiesen werden kann, wenn C# bereits für CodeBehind-Dateien des Projekts verwendet werden. Es bestehen jedoch unterschiedliche Möglichkeiten, einem Projekt Code hinzuzufügen. Alternativ können Sie Microsoft Visual Studio verwenden, um die Klasse in eine .dll-Datei zu kompilieren und dem Projekt dann einen Verweis auf die .dll-Datei hinzufügen.
Weitere Informationen finden Sie unter Hinzufügen oder Entfernen eines Verweises.
Klicken Sie mit der rechten Maustaste im Projektpanel auf das Projekt, und klicken Sie auf Neues Element hinzufügen.
Klicken Sie im Dialogfeld Neues Element auf Klasse, geben Sie im Feld NameDoubleValueConverter.cs ein, und klicken Sie auf OK.
In der Sprache der Projektmappe wird eine neue Codedatei erstellt. Für dieses Verfahren wird die Sprache C# verwendet. Die Datei wird dem Projekt hinzugefügt und auf der Zeichenfläche geöffnet.
Löschen Sie in der Datei DoubleValueConverter.cs die folgenden Klassendefinitionen:
public class DoubleValueConverter { public DoubleValueConverter() { // Insert code required on object creation below this point. } }
Ersetzen Sie den gelöschten Code durch folgenden Code, der die folgenden zwei Wertkonverterklassen enthält:
DoubleToIntegerValueConverter Ermöglicht eine bidirektionale Konvertierung zwischen einem double-Wert und einem Ganzzahlwert.
DoubleToRomanNumeralValueConverter Ermöglicht eine unidirektionale Konvertierung von einem double-Wert in eine Zeichenfolgendarstellung einer römischen Zahl.
/// <summary> /// DoubleToIntegerValueConverter provides a two-way conversion between /// a double value and an integer. /// </summary> public class DoubleToIntegerValueConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return System.Convert.ToInt32(value); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return System.Convert.ToDouble(value); } } /// <summary> /// DoubleToRomanNumeralValueConverter provides a one-way conversion from /// a double value to a string representation of a Roman numeral. /// </summary> public class DoubleToRomanNumeralValueConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return this.ConvertToRomanNumeral(System.Convert.ToInt32(value)); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return null; } private List<IntegerStringPair> romanStrings = null; private string ConvertToRomanNumeral(int input) { StringBuilder myBuilder = new StringBuilder(); foreach (IntegerStringPair thisPair in this.PairSet) { while (input >= thisPair.Value) { myBuilder.Append(thisPair.StringValue); input -= thisPair.Value; } } return myBuilder.ToString(); } private List<IntegerStringPair> PairSet { get { if (this.romanStrings == null) { this.romanStrings = new List<IntegerStringPair>(); this.romanStrings.Add(new IntegerStringPair(1000, "M")); this.romanStrings.Add(new IntegerStringPair(900, "CM")); this.romanStrings.Add(new IntegerStringPair(500, "D")); this.romanStrings.Add(new IntegerStringPair(400, "CD")); this.romanStrings.Add(new IntegerStringPair(100, "C")); this.romanStrings.Add(new IntegerStringPair(90, "XC")); this.romanStrings.Add(new IntegerStringPair(50, "L")); this.romanStrings.Add(new IntegerStringPair(40, "XL")); this.romanStrings.Add(new IntegerStringPair(10, "X")); this.romanStrings.Add(new IntegerStringPair(9, "IX")); this.romanStrings.Add(new IntegerStringPair(5, "V")); this.romanStrings.Add(new IntegerStringPair(4, "IV")); this.romanStrings.Add(new IntegerStringPair(1, "I")); } return this.romanStrings; } } } /// <summary> /// IntegerStringPair provides an easy way to store integer and string pairs. /// </summary> public class IntegerStringPair { private int value; private string stringValue; public int Value { get { return this.value; } } public string StringValue { get { return this.stringValue; } } public IntegerStringPair(int value, string stringValue) { this.value = value; this.stringValue = stringValue; } }
Erstellen Sie die Projektmappe (STRG+UMSCHALT+B), um zu überprüfen, ob Fehler auftreten.
Tipp: Bei der Erstellung werden die Codedateien kompiliert und Expression Blend die Klassen zur Verfügung gestellt (z. B. im Dialogfeld Datenbindung erstellen). Wenn Sie der Codedatei neue Klassen hinzufügen, müssen Sie die Projektmappe neu erstellen, um die Klassen für Expression Blend verfügbar zu machen.
So wenden Sie einen Wertkonverter auf eine Eigenschaft an
Im folgenden Verfahren werden die Wertkonverter im vorangehenden Verfahren auf die Werte eines Slider-Objekts angewendet, wenn der Wert an zwei TextBox-Objekte gebunden ist. Als Ergebnis zeigen die Textfelder den Slider-Wert in der Ganzzahldarstellung und in der Darstellung als römische Zahl an.
Klicken Sie mit der rechten Maustaste im Werkzeugpanel auf die Schaltflächenwerkzeuggruppe, und wählen Sie das Slider -Steuerelement aus der angezeigten Liste aus.
Ziehen Sie ein Slider-Steuerelement auf die Zeichenfläche in Ihrem Hauptdokument.
Suchen Sie bei ausgewähltem Slider-Objekt im Eigenschaftenpanel unter Allgemeine Eigenschaften die folgenden Eigenschaften, und legen Sie die Werte der Eigenschaften wie folgt fest:
Legen Sie für LargeChange den Wert 10 fest. Hierbei handelt es sich um die inkrementelle Änderung, die beim Klicken auf den Schieberegler auftritt.
Legen Sie für Maximum den Wert 2001 fest. Der Schieberegler geht von 0 bis 2001.
Legen Sie für SmallChange den Wert 1 fest. Hierbei handelt es sich um die inkrementelle Änderung, die auftritt, wenn Sie den Schieberegler mit den Pfeiltasten verschieben.
Klicken Sie mit der rechten Maustaste im Werkzeugpanel auf die zweite Werkzeuggruppe von unten, und wählen Sie das TextBox -Steuerelement aus der angezeigten Liste aus.
Zeichnen Sie neben dem Slider-Objekt zwei TextBox-Steuerelemente auf die Zeichenfläche.
Wählen Sie das erste TextBox-Objekt aus, und suchen Sie im Eigenschaftenpanel unter Allgemeine Eigenschaften nach der Text-Eigenschaft. Auf diese Weise wird die Text-Eigenschaft an den Wert des Schiebereglers gebunden.
Klicken Sie auf Erweiterte Eigenschaftenoptionen und anschließend in der angezeigten Liste auf Datenbindung.
Klicken Sie im Dialogfeld Datenbindung erstellen auf die Registerkarte Elementeigenschaft. Hier binden Sie interne Werte an Eigenschaften.
Erweitern Sie die Elementstruktur unter Szenenelemente, und wählen Sie anschließend das [Slider]-Objekt aus.
Wählen Sie unter EigenschaftenValue : (Double) aus.
Auf diese Weise wird der Inhalt des Textfelds an den Wert des Schiebereglers gebunden.
Klicken Sie auf Erweitere Eigenschaften einblenden und dann neben Wertkonverter auf Neuen Wertkonverter hinzufügen .
Wählen Sie im Dialogfeld Wertkonverter hinzufügenDoubleToIntegerValueConverter aus, und klicken Sie auf OK.
Tipp: Wenn der Wertkonverter nicht angezeigt wird, prüfen Sie, ob Sie die Quelldatei, die Sie im vorherigen Verfahren erstellt haben (die Datei DoubleValueConverter.cs), dem Projekt hinzugefügt haben, und ob Sie das Projekt erstellt haben (STRG+UMSCHALT+B).
Klicken Sie im Dialogfeld Datenbindung erstellen auf OK.
Das erste Label-Objekt zeigt nun eine Ganzzahldarstellung des Schiebereglers an.
Hinweis: Dem Slider-Objekt wurde der Name Slider gegeben. Objekte in der Anwendung müssen einen Namen haben, damit in der Anwendung darauf verwiesen werden kann, z. B. während der Datenbindung. Der Name wird von Expression Blend erstellt.
Wiederholen Sie die Schritte 6 bis 13 mit dem zweiten Textfeld. Wählen Sie jedoch im Dialogfeld Wertkonverter hinzufügenDoubleToRomanNumeralValueConverter aus.
Führen Sie das Projekt (F5) aus. Verschieben Sie den Schieberegler, um zu prüfen, ob die Werte in den beiden Bezeichnungen aktualisiert werden.
Wenn Sie den Wertkonverter nicht verwenden, zeigt das Textfeld, das den Wert eines Sliders anzeigt, viele Dezimalstellen an.
Siehe auch
Aufgaben
Binden eines Objekts an Benutzereingaben oder andere interne Werte