将枚举数据绑定到WPF中的ComboBox,过滤一些枚举

时间:2010-05-01 19:08:43

标签: wpf combobox datagridtemplatecolumn

我需要将枚举绑定到DataGridTemplateColumn中的组合框,但只需要enum具有的一些选项。
示例:
枚举选项: 未知一个两个三个四个全部< / b>
可绑定的:一个两个三个四个

有什么办法吗?
非常感谢。

祝你好运

3 个答案:

答案 0 :(得分:5)

我有一个用于此的值转换器。它适用于绑定到枚举类型的属性,该属性将用于ItemsSource和SelectedItem:

<ComboBox ItemsSource="{Binding Path=Day, Converter={StaticResource EnumToListConverter}, ConverterParameter='Monday;Friday'}" SelectedItem="{Binding Day}"/>

也可以通过直接引用枚举来使用它:

<ComboBox ItemsSource="{Binding Source={x:Static sys:DayOfWeek.Sunday}, Converter={StaticResource EnumToListConverter}, ConverterParameter='Monday;Friday'}" Grid.Column="2"/>

这是转换器代码:

public class EnumToListConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (!(value is Enum))
            return null;

        string filters = parameter == null ? String.Empty : parameter.ToString();
        IEnumerable enumList;
        string[] splitFilters = filters != null ? filters.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries) : new string[] { };
        List<string> removalList = new List<string>(splitFilters);
        Type enumType = value.GetType();
        Array allValues = Enum.GetValues(enumType);
        try
        {
            var filteredValues = from object enumVal in allValues
                                 where !removalList.Contains(Enum.GetName(enumType, enumVal))
                                 select enumVal;
            enumList = filteredValues;
        }
        catch (ArgumentNullException)
        {
            enumList = allValues;
        }
        catch (ArgumentException)
        {
            enumList = allValues;
        }
        return enumList;

    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

答案 1 :(得分:0)

将要绑定的枚举复制到数组中,然后绑定到数组。

答案 2 :(得分:0)

可能这个纠结可以帮到你

Databinding an enum property to a ComboBox in WPF