Bind to enum types

image_pdfimage_print


   
  
<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&#91;0&#93;,BindsDirectlyToSource=true,UpdateSourceTrigger=PropertyChanged,
                    Converter={StaticResource doubleToString}}"/>
        
        <ComboBox Width="80" HorizontalAlignment="Left"
            SelectedValue="{Binding Source={StaticResource convertDistance},Path=MethodParameters&#91;1&#93;, 
                            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.cs

using System;
using System.Windows.Data;

namespace WpfApplication1
{
    public class DoubleToString : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture)
        {
            if(value != null)
            {
                return value.ToString();
            }
            return null;
        }

        public object ConvertBack(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture)
        {
            string strValue = value as string;
            if(strValue != null)
            {
                double result;
                bool converted = Double.TryParse(strValue, out result);
                if(converted)
                {
                    return result;
                }
            }
            return null;
        }
    }


    public enum DistanceType
    {
        Miles,
        Kilometres
    }

    public class DistanceConverter
    {
        public string Convert(double amount, DistanceType distancetype)
        {
            if(distancetype == DistanceType.Miles)
                return (amount * 1.6).ToString("0.##") + " km";

            if(distancetype == DistanceType.Kilometres)
                return (amount * 0.6).ToString("0.##") + " m";

            throw new ArgumentOutOfRangeException("distanceType");
        }
    }
}