Condividi tramite


Procedura: eseguire l'associazione a un metodo

Nell'esempio riportato di seguito viene illustrato come eseguire l'associazione a un metodo utilizzando ObjectDataProvider.

Esempio

In questo esempio, TemperatureScale è una classe che dispone di un metodo ConvertTemp che accetta due parametri (uno double e uno del tipo enum TempType) e converte il valore specificato da una scala della temperatura a un'altra. Nell'esempio riportato di seguito, un oggetto ObjectDataProvider viene utilizzato per creare un'istanza dell'oggetto TemperatureScale. Il metodo ConvertTemp viene chiamato con due parametri specificati.

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

Ora che il metodo è disponibile come risorsa, è possibile eseguire l'associazione ai risultati. Nell'esempio riportato di seguito, la proprietà Text di TextBox e la proprietà SelectedValue di ComboBox sono associate ai due parametri del metodo. In questo modo è possibile consentire agli utenti di specificare la temperatura da convertire e la scala della temperatura da cui eseguire la conversione. Si noti che la proprietà BindsDirectlyToSource è impostata su true poiché viene eseguita l'associazione alla proprietà MethodParameters dell'istanza ObjectDataProvider e non alle proprietà dell'oggetto incapsulate da ObjectDataProvider (oggetto TemperatureScale ).

La proprietà Content dell'ultimo oggetto Label viene aggiornata quando l'utente modifica il contenuto di TextBox o la selezione di 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"/>

Il convertitore DoubleToString accetta un valore double, lo converte in una stringa nella direzione del metodo Convert (dall'origine di associazione alla destinazione di associazione, rappresentata dalla proprietà Text) e converte un valore string in un valore double nella direzione del metodo ConvertBack.

InvalidationCharacterRule è un oggetto ValidationRule che verifica la presenza di caratteri non validi. Il modello di errori predefinito, rappresentato da un bordo rosso intorno a TextBox, viene visualizzato per notificare agli utenti i casi in cui il valore di input non è double.

Vedere anche

Attività

Procedura: eseguire l'associazione a un'enumerazione

Altre risorse

Procedure relative all'associazione dati