Cómo: Enlazar a un método

En el ejemplo siguiente se muestra cómo enlazar a un método mediante 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 enum TempType) y convierte el valor dado de una escala de temperatura a otra. En el ejemplo siguiente, se utiliza 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 recurso, puede enlazar sus resultados. En el ejemplo siguiente, la propiedad Text de TextBox y la propiedad 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 efectuar la conversión. Observe que BindsDirectlyToSource está establecido en true porque estamos enlazando la propiedad MethodParameters de la instancia ObjectDataProvider y no las propiedades del objeto contenidas en ObjectDataProvider (el objeto TemperatureScale).

El Content de la última 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 método convertidor DoubleToString toma 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

Tareas

Cómo: Enlazar a una enumeración

Otros recursos

Temas "Cómo..." sobre enlace de datos