是否可以绑定到WPF中的方法?
如果答案是肯定的,请举例说明。
感谢。
答案 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值时通知用户。