I want to show list of products in ListView where one of the columns is a ComboBox that I want to bind. This is my enum:
public enum SelectionMode { One, Two } And Product class:
public class Product { public SelectionMode Mode { get; set; } public string Name { get; set; } } In ViewModel class I have an ObservableCollection of Product's:
private ObservableCollection<Product> _productList; public ObservableCollection<Product> ProductList { get { return _productList; } set { _productList = value; } } public MainViewModel() { ProductList = new ObservableCollection<Product> { new Product {Mode = SelectionMode.One, Name = "One"}, new Product {Mode = SelectionMode.One, Name = "One"}, new Product {Mode = SelectionMode.Two, Name = "Two"} }; } And finally I have a Grid with a ListView that binds to my ProductList:
<Window.Resources> <ObjectDataProvider x:Key="AlignmentValues" MethodName="GetNames" ObjectType="{x:Type System:Enum}"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="ViewModel:SelectionMode" /> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </Window.Resources> <Grid> <ListView Height="120" HorizontalAlignment="Left" VerticalAlignment="Top" SelectionMode="Multiple" ItemsSource="{Binding ProductList}" > <ListView.View> <GridView> <GridViewColumn Width="120" Header="Product Name" DisplayMemberBinding="{Binding Path=Name}" /> <GridViewColumn Header="Selection Mode"> <GridViewColumn.CellTemplate> <DataTemplate> <ComboBox ItemsSource="{Binding Source={StaticResource AlignmentValues}}"/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView> </Grid> My question is; what is the way to bind SelectedValue of ComboBox to SelectionMode property of my Product class?
Update
Well. I found an answer in this topic. So I have to add converter class:
public class MyEnumToStringConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return value.ToString(); } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return (SelectionMode)Enum.Parse(typeof(SelectionMode), value.ToString(), true); } } And add it to window resources:
<Window.Resources> <ObjectDataProvider x:Key="AlignmentValues" MethodName="GetNames" ObjectType="{x:Type System:Enum}"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="ViewModel:SelectionMode" /> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> <Converters:MyEnumToStringConverter x:Key="MyEnumConverter"/> </Window.Resources> And finally edit ComboBox data template:
<ComboBox ItemsSource="{Binding Source={StaticResource AlignmentValues}}" SelectedValue="{Binding Path=Mode, Converter={StaticResource MyEnumConverter}}"/> That's all. Hope it will be useful for someone else :)