I have a enum type, and want to display it in column with image, and filter it with description. I directly convert enum type to image path, and can display it in column, but can not filter it. I convert enum type to a class with properties, such as image path, description, but can not binding it correctly.
<Window x:Class="TrafficLight.MainWindow" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" xmlns:local="clr-namespace:TrafficLight" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Title="MainWindow" Height="350" Width="600"> <Window.Resources> <local:LightConvert x:Key="Converter"/> <local:LightStringConvert x:Key="StringConverter"/> <local:LightWrpper x:Key="LightWrpper"/> <DataTemplate x:Key="ImageCellTemplate"> <Image Height="16" Width="16" HorizontalAlignment="Center" Source="{Binding SouthNorthLight, Converter={StaticResource ResourceKey=Converter}}"/> </DataTemplate> <DataTemplate x:Key="LightListTemplate"> <StackPanel Orientation="Horizontal"> <Image HorizontalAlignment="Center" VerticalAlignment="Center" Height="16" Width="16" Source="{Binding ImagePath}"/> <TextBlock Text="{Binding Description}" HorizontalAlignment="Left" VerticalAlignment="Center" Padding="5,0,2,0" /> </StackPanel> </DataTemplate> </Window.Resources> <Window.DataContext> <local:LightViewModel/> </Window.DataContext> <Grid> <telerik:RadGridView AutoGenerateColumns="False" ItemsSource="{Binding LightCollection}"> <telerik:RadGridView.Columns> <telerik:GridViewDataColumn Header="Location" IsReadOnly="True" DataMemberBinding="{Binding Location}"/> <telerik:GridViewImageColumn Header="South North Light" IsReadOnly="True" ImageHeight="16" ImageWidth="16" ImageStretch="Uniform" IsFilterable="False" DataMemberBinding="{Binding SouthNorthLight, Converter={StaticResource StringConverter}}"/> <telerik:GridViewComboBoxColumn Header="South North Light" IsFilterable="False" FilterMemberPath="Description" DataMemberBinding="{Binding SouthNorthLight, Converter={StaticResource Converter}}" ItemsSource="{Binding Path=LightWrpperList, Source={StaticResource LightWrpper}}" ItemTemplate="{StaticResource LightListTemplate}"/> <telerik:GridViewImageColumn Header="East West Light" IsReadOnly="True" ImageHeight="24" ImageWidth="24" ImageStretch="Uniform" FilterMemberPath="Description" SortMemberPath="Description" DataMemberBinding="{Binding EastWestLight, Converter={StaticResource Converter}}"> <telerik:GridViewImageColumn.CellTemplate> <DataTemplate> <Image HorizontalAlignment="Center" Source="{Binding Path=ImagePath}"/> </DataTemplate> </telerik:GridViewImageColumn.CellTemplate> </telerik:GridViewImageColumn> <telerik:GridViewComboBoxColumn Header="South North Light" IsFilterable="True" FilterMemberPath="Description" DataMemberBinding="{Binding SouthNorthLight, Converter={StaticResource Converter}}" CellTemplate="{StaticResource ImageCellTemplate}" ItemsSource="{Binding Path=LightWrpperList, Source={StaticResource LightWrpper}}" ItemTemplate="{StaticResource LightListTemplate}"/> </telerik:RadGridView.Columns> </telerik:RadGridView> </Grid></Window>using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Globalization;using System.Windows.Data;namespace TrafficLight{ public enum Light { Green, Red, Yello, } public class Lights { public Light SouthNorthLight { get; set; } public Light EastWestLight { get; set; } public string Location { get; set; } } public class LightViewModel { public ObservableCollection<Lights> LightCollection { get; private set; } public LightViewModel() { LightCollection = new ObservableCollection<Lights>(); LightCollection.Add(new Lights() { SouthNorthLight = Light.Green, EastWestLight = Light.Red, Location = "The 5th St" }); LightCollection.Add(new Lights() { SouthNorthLight = Light.Red, EastWestLight = Light.Green, Location = "St John Rd" }); LightCollection.Add(new Lights() { SouthNorthLight = Light.Yello, EastWestLight = Light.Red, Location = "Sents Rd" }); } } public class LightWrpper { public static List<LightWrpper> LightWrpperList { get; private set; } public static LightWrpper Red { get; private set; } public static LightWrpper Green { get; private set; } public static LightWrpper Yello { get; private set; } static LightWrpper() { Red = new LightWrpper() { Light = Light.Red, ImagePath = "Images/Red.png", Description = "Red Light On" }; Green = new LightWrpper() { Light = Light.Green, ImagePath = "Images/Green.png", Description = "Green Light On" }; Yello = new LightWrpper() { Light = Light.Yello, ImagePath = "Images/Yello.png", Description = "Yello Light On" }; LightWrpperList = new List<LightWrpper>(); LightWrpperList.Add(Red); LightWrpperList.Add(Green); LightWrpperList.Add(Yello); } public Light Light { get; private set; } public string ImagePath { get; private set; } public string Description { get; private set; } } [ValueConversion(typeof(Light), typeof(LightWrpper))] public class LightConvert : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) { return LightWrpper.Yello; } var light = (Light)value; switch (light) { case Light.Green: return LightWrpper.Green; case Light.Red: return LightWrpper.Red; default: return LightWrpper.Yello; } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) { return Light.Yello; } var light = (LightWrpper)value; switch (light.Light) { case Light.Green: return Light.Green; case Light.Red: return Light.Red; default: return Light.Yello; } } } [ValueConversion(typeof(Light), typeof(string))] public class LightStringConvert : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var light = (Light)value; switch (light) { case Light.Green: return "Images/Green.png"; case Light.Red: return "Images/Red.png"; default: return "Images/Yello.png"; } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }}