Bind to a Method
<Window
x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
xmlns:WpfApplication1="clr-namespace:WpfApplication1"
Title="WPF" Width="240" Height="150" >
<Window.Resources>
<WpfApplication1:DoubleToString x:Key="doubleToString" />
<ObjectDataProvider x:Key="convertDistance"
ObjectType="{x:Type WpfApplication1:DistanceConverter }"
MethodName="Convert" >
<ObjectDataProvider.MethodParameters>
<system:Double>0</system:Double>
<WpfApplication1:DistanceType>Miles</WpfApplication1:DistanceType>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<StackPanel>
<TextBlock Text="Enter a distance to convert:"/>
<TextBox Text ="{Binding Source={StaticResource convertDistance},
Path=MethodParameters[0],BindsDirectlyToSource=true,UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource doubleToString}}"/>
<ComboBox Width="80" HorizontalAlignment="Left"
SelectedValue="{Binding Source={StaticResource convertDistance},Path=MethodParameters[1],
BindsDirectlyToSource=true}" >
<WpfApplication1:DistanceType>Miles</WpfApplication1:DistanceType>
<WpfApplication1:DistanceType>Kilometres</WpfApplication1:DistanceType>
</ComboBox>
<TextBlock Text="Result:"/>
<TextBlock Text="{Binding Source={StaticResource convertDistance}}"/>
</StackPanel>
</Window>
//File:Window.xaml.vb
Imports System
Imports System.Windows.Data
Namespace WpfApplication1
Public Class DoubleToString
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert
If value IsNot Nothing Then
Return value.ToString()
End If
Return Nothing
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Dim strValue As String = TryCast(value, String)
If strValue IsNot Nothing Then
Dim result As Double
Dim converted As Boolean = [Double].TryParse(strValue, result)
If converted Then
Return result
End If
End If
Return Nothing
End Function
End Class
Public Enum DistanceType
Miles
Kilometres
End Enum
Public Class DistanceConverter
Public Function Convert(amount As Double, distancetype__1 As DistanceType) As String
If distancetype__1 = DistanceType.Miles Then
Return (amount * 1.6).ToString("0.##") & " km"
End If
If distancetype__1 = DistanceType.Kilometres Then
Return (amount * 0.6).ToString("0.##") & " m"
End If
Throw New ArgumentOutOfRangeException("distanceType")
End Function
End Class
End Namespace
Related examples in the same category