Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das folgende Beispiel zeigt, wie man mithilfe von ObjectDataProvideran eine Methode bindet.
Beispiel
In diesem Beispiel ist TemperatureScale eine Klasse mit einer Methode ConvertTemp, die zwei Parameter annimmt (einen von double und einen vom Typ enumTempType)) und den angegebenen Wert von einer Temperaturskala in eine andere konvertiert. 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>
Nachdem die Methode nun als Ressource verfügbar ist, können Sie an die Ergebnisse binden. Im folgenden Beispiel sind die Text-Eigenschaft der TextBox und die SelectedValue der ComboBox an die beiden Parameter der Methode gebunden. Auf diese Weise können Benutzer die zu konvertierende Temperatur und die zu konvertierende Temperaturskala angeben. Beachten Sie, dass BindsDirectlyToSource auf true festgelegt ist, da wir an die MethodParameters-Eigenschaft der ObjectDataProvider-Instanz binden und nicht an Eigenschaften des Objekts, das durch die ObjectDataProvider (das TemperatureScale-Objekt) umschlossen wird.
Der Content der letzten Label aktualisiert sich, wenn die benutzende Person den Inhalt des TextBox oder die Auswahl des 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 double-Richtung in einen ConvertBack.
Die InvalidCharacterRule 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.
Siehe auch
.NET Desktop feedback