Share via


Como: Bind to a Method

O exemplo a seguir mostra como ligar a um método utilizando ObjectDataProvider.

Exemplo

Neste exemplo, TemperatureScale é uma classe que tem um método ConvertTemp, que recebe dois parâmetros (um double e um TempType) do tipo enum) e converte o valor dado de uma escala de temperatura para outra. No exemplo a seguir, um ObjectDataProvider é utilizado para instanciar o objeto TemperatureScale. O método ConvertTemp é chamado com dois parâmetros específicos.

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

Agora que o método está disponível como um recurso, você pode ligar a seus resultados. No exemplo a seguir, a propriedade Text do TextBox e o SelectedValue do ComboBox estão ligadas aos dois parâmetros do método. Isso permite que os usuários especifiquem a temperatura para converter e a escala de temperatura da qual converter. Observe que BindsDirectlyToSource é definido como true porque estamos ligando dom a propriedade MethodParameters da instância ObjectDataProvider e não propriedades do objeto wrapped pelo ObjectDataProvider (o objeto TemperatureScale).

A Content do último Label é atualizado quando o usuário modifica o conteúdo do TextBox ou a seleção do 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"/>

O conversor DoubleToString toma um double e o converte em um string na direção Convert (da origem de ligação para destino da ligação, que é a propriedade Text) e converte um string para um double na direção ConvertBack.

O InvalidationCharacterRule é um ValidationRule que verifica se há caracteres inválidos. O modelo de erro default, que é uma borda vermelha em torno do TextBox, aparece para avisar os usuários quando o valor de entrada não é um valor double.

For the complete example, see VinculParando Paraos resultParados de um exemplo de mParaParado.

Consulte também

Tarefas

Como: Como Associar a uma Enumeração

Outros recursos

Exemplos de ligação de dados

Data Binding How-to Topics