Comment : effectuer une liaison à une méthode

L'exemple suivant indique comment créer une liaison avec une méthode à l'aide de ObjectDataProvider.

Exemple

Dans cet exemple, TemperatureScale est une classe qui a une méthode ConvertTemp, qui prend deux paramètres (un de type double et un de type enumTempType)) et convertit la valeur donnée d'une échelle de température à une autre. Dans l'exemple suivant, un ObjectDataProvider 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 créer une liaison avec ses résultats. Dans l'exemple suivant, la propriété Text du TextBox et le SelectedValue du ComboBox est liée aux deux paramètres de la méthode. Cela permet aux utilisateurs de spécifier la température sur et à partir de laquelle effectuer la conversion. Notez que BindsDirectlyToSource a la valeur true car nous créons une liaison avec la propriété MethodParameters de l'instance ObjectDataProvider et pas avec les propriétés de l'objet encapsulé par le ObjectDataProvider (l'objet TemperatureScale).

Le Content du dernier Label se met à 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 direction Convert (de la source de liaison à la cible de liaison, qui est la propriété Text) et convertit un string en double dans la direction ConvertBack.

La InvalidationCharacterRule est une ValidationRule qui vérifie les caractères non valides. Le modèle d'erreur par défaut, qui est une bordure rouge autour du TextBox semble notifier les utilisateurs lorsque la valeur d'entrée n'est pas une valeur double.

Voir aussi

Tâches

Comment : effectuer une liaison à une énumération

Autres ressources

Rubriques "Comment" relatives aux liaisons de données