Share via


Cómo: Enlazar a un método

En el ejemplo siguiente se muestra cómo se enlaza a un método usando ObjectDataProvider.

Ejemplo

En este ejemplo, TemperatureScale es una clase que tiene un método ConvertTemp, que toma dos parámetros (uno de tipo double y uno de tipo enumTempType), y convierte el valor dado de una escala de temperatura a otra. En el ejemplo siguiente, se usa ObjectDataProvider para crear instancias del objeto TemperatureScale. Se llama al método ConvertTemp con dos parámetros especificados.

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

Ahora que el método está disponible como un recurso, puede enlazar a los resultados. En el ejemplo siguiente, la propiedad Text de TextBox y SelectedValue de ComboBox se enlazan a los dos parámetros del método. Esto permite al usuario especificar la temperatura que se desea convertir y la escala de temperatura desde la que realizar la conversión. Tenga en cuenta que BindsDirectlyToSource se establece en true porque estamos enlazando a la propiedad MethodParameters de la instancia ObjectDataProvider y no a las propiedades del objeto encapsulado por ObjectDataProvider (el objeto TemperatureScale).

El Content de las últimas Label se actualiza cuando el usuario modifica el contenido de TextBox o la selección de 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"/>

El convertidor DoubleToString adopta un valor de tipo double y lo convierte en un valor de tipo string en la dirección Convert (del origen de enlace al destino de enlace, que es la propiedad Text) y convierte el valor string en un valor double en la dirección ConvertBack.

InvalidationCharacterRule es una ValidationRule que comprueba si hay caracteres no válidos. La plantilla de error predeterminada, que es un borde rojo alrededor de un control TextBox, aparece para notificar a los usuarios cuando el valor de entrada no es un valor de tipo double.

Vea también