Weiterführende Themen: Erstellen und Anwenden eines Wertkonverters
Ein Wertkonverter ist eine bequeme Möglichkeit, Daten von einem Typ in einen anderen zu konvertieren. Wenn Sie die Eigenschaften der Objekte in Microsoft Expression Blend an Datenwerte oder andere Eigenschaften binden, müssen die Datentypen übereinstimmen. Beispiel: Sie möchten eine Zeichenfolge wie etwa "123" in den entsprechenden ganzzahligen Wert für einen Schieberegler oder ein Feld wie Visibility.Hidden in einen booleschen Wert wie false konvertieren.
Ein Wertkonverter implementiert die IValueConverter-Schnittstelle im Code in eine Microsoft .NET Framework-Klasse. Sowohl die Convert- als auch die ConvertBack-Methode muss implementiert werden, da das Datenbindungsmodul beim Verschieben eines Werts zwischen der Bindungsquelle und dem Bindungsziel diese Methoden aufruft. Weitere Informationen finden Sie unter IValueConverter-Schnittstelle in MSDN.
Um einen Wertkonverter anzuwenden, füllen Sie einfach beim Binden von Daten an eine Eigenschaft das Feld Wertkonverter im Dialogfeld Datenbindung erstellen aus.
Hinweis: |
---|
Das zweite Verfahren in diesem Thema wendet den Wertkonverter mithilfe der Bindung zwischen Elementen an. Dies wird in Silverlight 2 nicht unterstützt. Sie können den Wertkonverter jedoch auf Datenbindungsvorgänge mit einer CLR-Datenquelle anwenden. |
So erstellen Sie eine Wertkonverterklasse
Fügen Sie den folgenden Code in die Datei DoubleValueConverter.cs ein. Dieser Code enthält die folgenden beiden Wertkonverter:
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.
using System; using System.Collections.Generic; using System.Text; using System.Windows.Data; namespace Microsoft.Expression.Samples { /// <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> /// DoubleToIntegerValueConverter 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; } } }
Nach oben
So wenden Sie einen Wertkonverter auf eine Eigenschaft an
In der folgenden Prozedur werden die Wertkonverter im vorangehenden Code auf die Werte eines Slider-Objekts angewendet, wenn der Wert an zwei Label-Objekte gebunden ist. Als Ergebnis zeigen die Bezeichnungen den Slider-Wert in der Ganzzahldarstellung und in der Darstellung als römische Zahl an.
Fügen Sie die Datei DoubleValueConverter.cs dem Projekt in Expression Blend hinzu. Klicken Sie im Menü Projekt auf Vorhandenes Element hinzufügen, suchen Sie die Datei DoubleValueConverter.cs, und klicken Sie dann auf Öffnen.
Hinweis: Stellen Sie sicher, dass das Projekte mit der Visual C#-Option Sprache erstellt wurde. Alternativ können Sie die Datei DoubleValueConverter.cs auch in eine DLL-Datei integrieren und dem Projekt einen Verweis auf die DLL-Datei hinzufügen.
Erstellen Sie das Projekt (STRG+UMSCHALTTASTE+B), um die Wertkonverterklassen für das Projekt verfügbar zu machen.
Fügen Sie über die Werkzeugpalette zwei Label-Steuerelemente und ein Slider-Steuerelement zur Zeichenfläche hinzu. Ordnen Sie sie so an, dass sie genügend Platz haben.
Legen Sie im Eigenschaftenpanel unter Allgemeine Eigenschaften die folgenden Eigenschaften fest, wobei unter Objekte und Zeitachsen das Slider-Objekt aktiviert ist:
Legen Sie für LargeChange den Wert 10 fest. Hierbei handelt es sich um die inkrementelle Änderung, die beim Klicken auf das Slider-Steuerelement auftritt.
Legen Sie für Maximum den Wert 2001 fest. Das Slider-Steuerelement wechselt von 0 zu 2001.
Legen Sie für SmallChange den Wert 1 fest. Hierbei handelt es sich um die inkrementelle Änderung, die auftritt, wenn Sie das Slider-Steuerelement mithilfe der Pfeiltasten verschieben.
Klicken Sie im Eigenschaftenpanel unter Allgemeine Eigenschaften auf die Content-Eigenschaft (Inhalt), wobei unter Objekte und Zeitachsen das erste Label-Objekt aktiviert ist. Klicken Sie in der Dropdownliste auf Datenbindung. Das Dialogfeld Datenbindung erstellen wird geöffnet.
Klicken Sie auf der Registerkarte Elementeigenschaft in der Elementstruktur unter Szenenelemente auf Slider (Schieberegler).
Wählen Sie auf der Registerkarte Elementeigenschaft aus der Dropdownliste Anzeigen die Option Alle Eigenschaften aus.Wählen Sie danach unter Eigenschaften die Option Wert: (Doppelt) aus. Auf diese Weise wird der Inhalt der Bezeichnung an den Wert des Schiebereglers gebunden.
Klicken Sie im Dialogfeld Datenbindung erstellen auf die Schaltfläche Erweitern, um die erweiterten Einstellungen anzuzeigen.
Klicken Sie neben dem Dropdownfeld Wertkonverter auf die Schaltfläche Neuen Wertkonverter hinzufügen. Das Dialogfeld Wertkonverter hinzufügen wird geöffnet.
Erweitern Sie den Namen des Projekts und den Namespace Microsoft.Expression.Samples, klicken Sie auf DoubleToIntegerValueConverter und dann auf OK.
Tipp: Wenn der Wertkonverter nicht angezeigt wird, prüfen Sie, ob Sie die Quelldatei dem Projekt hinzugefügt und das Projekt erstellt haben (STRG+UMSCHALT+B).
Klicken Sie im Dialogfeld Datenbindung erstellen auf Fertig stellen. Das erste Label-Objekt zeigt nun eine Ganzzahldarstellung des Schiebereglers an.
Hinweis: Dem Schiebereglerobjekt wurde der Name Slider gegeben. Objekte in Ihrer 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 festgelegt.
Wiederholen Sie die Schritte 5 bis 11 mit der zweiten Bezeichnung. Wählen Sie jedoch im Dialogfeld Wertkonverter hinzufügen die Option DoubleToRomanNumeralValueConverter aus.
Testen Sie das Projekt (F5). Verschieben Sie den Schieberegler, um zu prüfen, ob die Werte in den beiden Bezeichnungen aktualisiert werden.
Nach oben