Como associar a um método
O exemplo a seguir mostra como associar a um método usando ObjectDataProvider.
Exemplo
Neste exemplo, TemperatureScale
é uma classe que tem um método ConvertTemp
, que usa dois parâmetros (um do tipo double
e outro do tipo enum
TempType)
e converte o valor dado de uma escala de temperatura em outra. No exemplo a seguir, an ObjectDataProvider é usado para instanciar o TemperatureScale
objeto. O método ConvertTemp
é chamado com dois 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>
Agora que o método está disponível como um recurso, é possível associar aos seus resultados. No exemplo a seguir, a Text propriedade de the TextBox e of SelectedValue the ComboBox estão associadas aos dois parâmetros do método. Isso permite que os usuários especifiquem a temperatura a ser convertida e a escala de conversão. Observe que BindsDirectlyToSource está definido como true
porque estamos vinculando à MethodParameters propriedade da ObjectDataProvider instância e não às propriedades do objeto encapsulado ObjectDataProvider pelo (o TemperatureScale
objeto).
O Content das últimas Label atualizações 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
pega Convert um duplo e o transforma em uma string na direção (da origem da ligação para o destino da ligação, que é a Text propriedade) e converte a string
em a double
na ConvertBack direção.
O InvalidCharacterRule
é um ValidationRule que verifica se há caracteres inválidos. O modelo de erro padrão, que é uma borda vermelha ao redor do TextBox, aparece para notificar os usuários quando o valor de entrada não é um valor duplo.
Confira também
.NET Desktop feedback