Gewusst wie: Binden an eine Methode
Im folgenden Beispiel sehen Sie, wie Sie mit ObjectDataProvider eine Bindung an eine Methode herstellen.
Beispiel
In diesem Beispiel ist TemperatureScale
eine Klasse, die über eine ConvertTemp
-Methode verfügt. Auf Grundlage von zwei Parametern (einem des Typs double
und einem des enum
-Typs TempType)
) konvertiert diese Methode den vorgegebenen Wert von einer Temperaturskala in eine andere. Im folgenden Beispiel wird mit einem ObjectDataProvider ein TemperatureScale
-Objekt instanziiert. Die ConvertTemp
-Methode wird mit zwei angegebenen Parametern aufgerufen.
<Window.Resources>
<ObjectDataProvider ObjectType="{x:Type local:TemperatureScale}"
MethodName="ConvertTemp" x:Key="convertTemp">
<ObjectDataProvider.MethodParameters>
<system:Double>0</system:Double>
<local:TempType>Celsius</local:TempType>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
<local:DoubleToString x:Key="doubleToString" />
</Window.Resources>
Nun da die Methode als Ressource verfügbar ist, können Sie Bindungen an ihre Ergebnisse erstellen. Im folgenden Beispiel wird die Eigenschaft Text der TextBox und der SelectedValue der ComboBox an die beiden Parameter der Methode gebunden. Dies ermöglicht Benutzern, die zu konvertierende Temperatur sowie die Temperaturskala anzugeben, aus der konvertiert werden soll. Beachten Sie, dass BindsDirectlyToSource auf true
gesetzt wird, weil eine Bindung an die Eigenschaft MethodParameters der Instanz ObjectDataProvider hergestellt wird, und nicht an die Eigenschaften des vom ObjectDataProvider (dem TemperatureScale
-Objekt) umschlossenen Objekt.
Der Content des letzten Label aktualisiert sich, wenn der Benutzer den Inhalt der TextBox oder die Auswahl der ComboBox ändert.
<Label Grid.Row="1" HorizontalAlignment="Right">Enter the degree to convert:</Label>
<TextBox Grid.Row="1" Grid.Column="1" Name="tb">
<TextBox.Text>
<Binding Source="{StaticResource convertTemp}" Path="MethodParameters[0]"
BindsDirectlyToSource="true" UpdateSourceTrigger="PropertyChanged"
Converter="{StaticResource doubleToString}">
<Binding.ValidationRules>
<local:InvalidCharacterRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<ComboBox Grid.Row="1" Grid.Column="2"
SelectedValue="{Binding Source={StaticResource convertTemp},
Path=MethodParameters[1], BindsDirectlyToSource=true}">
<local:TempType>Celsius</local:TempType>
<local:TempType>Fahrenheit</local:TempType>
</ComboBox>
<Label Grid.Row="2" HorizontalAlignment="Right">Result:</Label>
<Label Content="{Binding Source={StaticResource convertTemp}}"
Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2"/>
Der Konverter DoubleToString
nimmt einen double-Wert und wandelt ihn in der Convert-Richtung (von der Bindungsquelle zum Bindungsziel, also der Eigenschaft Text) und konvertiert einen string
in der ConvertBack-Richtung in einen double
.
Die InvalidationCharacterRule
ist eine ValidationRule, die nach ungültigen Zeichen sucht. Die Standardfehlervorlage wird durch einen roten Rahmen um die TextBox dargestellt und benachrichtigt den Benutzer, falls es sich beim eingegebenen Wert nicht um einen double-Wert handelt.
Weitere Informationen
.NET Desktop feedback
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für