Mega Code Archive

 
Categories / C# / WPF
 

Bind to enum types

<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.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");         }     } }