0

是否可以绑定到 WPF 中的方法?

如果答案是肯定的,请举例说明。

谢谢。

4

1 回答 1

3

是的,这是来自 msdn 的完整示例:

在此示例中,TemperatureScale 是一个具有 ConvertTemp 方法的类,该方法采用两个参数(一个是双精度参数,另一个是枚举类型 TempType)并将给定值从一个温度刻度转换为另一个温度刻度。在以下示例中,ObjectDataProvider 用于实例化 TemperatureScale 对象。使用两个指定参数调用 ConvertTemp 方法。XAML

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

现在该方法可作为资源使用,您可以绑定到它的结果。在下面的示例中,TextBox 的 Text 属性和 ComboBox 的 SelectedValue 绑定到该方法的两个参数。这允许用户指定要转换的温度和要转换的温标。请注意,BindsDirectlyToSource 设置为 true,因为我们绑定到 ObjectDataProvider 实例的 MethodParameters 属性,而不是 ObjectDataProvider 包装的对象(TemperatureScale 对象)的属性。当用户修改 TextBox 的内容或 ComboBox 的选择时,最后一个 Label 的 Content 会更新。XAML

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

转换器 DoubleToString 接受一个 double 并将其转换为 Convert 方向的字符串(从绑定源到绑定目标,即 Text 属性),并将字符串转换为 ConvertBack 方向的 double 。InvalidationCharacterRule 是检查无效字符的 ValidationRule。默认错误模板是文本框周围的红色边框,当输入值不是双精度值时,它会通知用户。

于 2013-10-09T09:50:36.583 回答