Share via


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