Gewusst wie: Binden an eine Methode

Aktualisiert: November 2007

Im folgenden Beispiel wird die Bindung an eine Methode mithilfe von ObjectDataProvider veranschaulicht.

Beispiel

In diesem Beispiel ist TemperatureScale eine Klasse, die über eine ConvertTemp-Methode verfügt. Auf Grundlage von zwei Parametern (einer vom Typ double und einer vom Typ enum-Typ TempType) konvertiert diese Methode den vorgegebenen Wert von einer Temperaturskala in eine andere. Im folgenden Beispiel wird ein ObjectDataProvider verwendet, um das TemperatureScale-Objekt zu instanziieren. 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>

Jetzt ist die Methode als Ressource verfügbar, und Sie können Bindungen an ihre Ergebnisse erstellen. Im folgenden Beispiel wird die Text-Eigenschaft für das TextBox und für den SelectedValue für das ComboBox an die beiden Parameter der Methode gebunden. Dies ermöglicht es Benutzern, die zu konvertierende Temperatur sowie die Temperaturskala, aus der konvertiert werden soll, anzugeben. Beachten Sie, dass BindsDirectlyToSource auf true festgelegt ist, weil die Bindung an die MethodParameters-Eigenschaft der ObjectDataProvider-Instanz erfolgt und nicht an Eigenschaften des Objekts, das vom ObjectDataProvider eingeschlossen wird (das TemperatureScale-Objekt).

Der Content der letzten Label wird aktualisiert, sobald der Benutzer den Inhalt für das TextBox oder die Auswahl für das 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 wandelt einen double-Wert in eine Zeichenfolge in der Convert-Richtung um (von der Bindungsquelle zum Bindungsziel, das in diesem Fall die Text-Eigenschaft ist), und er wandelt eine string in einen double-Wert in der ConvertBack-Richtung um.

Die InvalidationCharacterRule ist eine ValidationRule, die nach ungültigen Zeichen sucht. Die Standardfehlervorlage wird durch einen roten Rahmen um das TextBox dargestellt und benachrichtigt den Benutzer, falls es sich beim eingegebenen Wert nicht um einen double-Wert handelt.

Das vollständige Beispiel finden Sie unter Beispiel zum Binden an die Ergebnisse einer Methode.

Siehe auch

Aufgaben

Gewusst wie: Binden an eine Enumeration

Weitere Ressourcen

Beispiel zur Datenbindung

Gewusst-wie-Themen zur Datenbindung