Do you mean that you want to bind a variable (not a property) to ComboBox.SelectedIndex? If so, I think that the better method to do this is bind a property to ComboBox.SelectedItem. The following example shows how to bind a property to the ComboBox.SelectedItem. If you want to have more functionality from the binding, you should have the property is a dependency property.
Code Snippet
<
Window
x:Class
="LearningSolution.MainWindow"
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:local ="clr-namespace:LearningSolution"
Name ="TheWindow" >
< Window .Resources >
< ObjectDataProvider x:Key ="EnumValues"
MethodName ="GetValues"
ObjectType ="{x:Type system:Enum}" >
< ObjectDataProvider .MethodParameters >
< x:Type TypeName ="local:LevelEnum" />
</ ObjectDataProvider.MethodParameters >
</ ObjectDataProvider >
< DataTemplate x:Key ="EnumValueTemplate" >
< TextBlock Text ="{Binding}" />
</ DataTemplate >
</ Window.Resources >
< StackPanel >
< ComboBox ItemsSource ="{Binding Source={StaticResource EnumValues}}"
ItemTemplate ="{StaticResource EnumValueTemplate}"
SelectedItem ="{Binding ElementName=TheWindow, Path=TheLevel, Mode=OneWayToSource}" />
< Button Click ="Button_Click" > Watch </ Button >
</ StackPanel >
</ Window >
public partial class MainWindow : Window
{
public LevelEnum TheLevel { get; set; }
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(this.TheLevel.ToString());
}
}
public enum LevelEnum { None = 0, First = 1, Second = 2, Third = 3 }
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:local ="clr-namespace:LearningSolution"
Name ="TheWindow" >
< Window .Resources >
< ObjectDataProvider x:Key ="EnumValues"
MethodName ="GetValues"
ObjectType ="{x:Type system:Enum}" >
< ObjectDataProvider .MethodParameters >
< x:Type TypeName ="local:LevelEnum" />
</ ObjectDataProvider.MethodParameters >
</ ObjectDataProvider >
< DataTemplate x:Key ="EnumValueTemplate" >
< TextBlock Text ="{Binding}" />
</ DataTemplate >
</ Window.Resources >
< StackPanel >
< ComboBox ItemsSource ="{Binding Source={StaticResource EnumValues}}"
ItemTemplate ="{StaticResource EnumValueTemplate}"
SelectedItem ="{Binding ElementName=TheWindow, Path=TheLevel, Mode=OneWayToSource}" />
< Button Click ="Button_Click" > Watch </ Button >
</ StackPanel >
</ Window >
public partial class MainWindow : Window
{
public LevelEnum TheLevel { get; set; }
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(this.TheLevel.ToString());
}
}
public enum LevelEnum { None = 0, First = 1, Second = 2, Third = 3 }
For more information about binding and dependency property, you could refer to the following links.