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

时间:2013-10-09 09:48:59

标签: wpf

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

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

感谢。

1 个答案:

答案 0 :(得分:3)

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

在此示例中,TemperatureScale是一个具有ConvertTemp方法的类,它接受两个参数(一个double和一个枚举类型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的内容会更新。 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,用于检查无效字符。默认错误模板(TextBox周围的红色边框)似乎在输入值不是double值时通知用户。