Share via


Comment : effectuer une liaison à une méthode

L’exemple suivant montre comment établir une liaison à une méthode à l’aide ObjectDataProviderde .

Exemple

Dans cet exemple, TemperatureScale est une classe qui possède une méthode ConvertTemp, qui prend deux paramètres (TempType), un de type double et l’autre de type enum) et convertit la valeur donnée d’une échelle de température à une autre. Dans l’exemple suivant, un ObjectDataProvider objet est utilisé pour instancier l’objet TemperatureScale . La méthode ConvertTemp est appelée avec deux paramètres spécifiés.

<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>

Maintenant que la méthode est disponible en tant que ressource, vous pouvez effectuer la liaison à ses résultats. Dans l’exemple suivant, la Text propriété du TextBox et SelectedValue celle-ci ComboBox sont liées aux deux paramètres de la méthode. Cela permet aux utilisateurs de spécifier la température à convertir et l’échelle de température à partir de laquelle effectuer la conversion. Notez que cette BindsDirectlyToSource valeur est définie true , car nous nous lient à la MethodParameters propriété de l’instance ObjectDataProvider et non aux propriétés de l’objet encapsulé par l’objet ObjectDataProvider (l’objet TemperatureScale ).

Les Content dernières Label mises à jour lorsque l’utilisateur modifie le contenu du TextBox ou la sélection du ComboBox.

<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"/>

Le convertisseur DoubleToString prend un double et le transforme en chaîne dans la Convert direction (de la source de liaison à la cible de liaison, qui est la Text propriété) et convertit un string en une double dans la ConvertBack direction.

Il InvalidationCharacterRule s’agit d’un ValidationRule case activée pour les caractères non valides. Le modèle d’erreur par défaut, qui est une bordure rouge autour du TextBox, semble avertir les utilisateurs lorsque la valeur d’entrée n’est pas une double valeur.

Voir aussi