Связывание перечисления с ComboBox в WPF, фильтрация некоторых перечислений - PullRequest
1 голос
/ 01 мая 2010

Мне нужно связать перечисление с полем со списком, который находится внутри DataGridTemplateColumn, но только с некоторыми опциями, имеющимися у перечисления.
Пример:
Опции enum: Неизвестно , Один , Два , Три , Четыре , Все
Привязываемые: Один , Два , Три , Четыре

Есть ли способ сделать это?
Большое спасибо.

С наилучшими пожеланиями

Ответы [ 3 ]

5 голосов
/ 03 мая 2010

У меня есть конвертер значений, который я использую для этого. Он предназначен для привязки к свойству типа enum, которое будет использоваться как для 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();
    }
}
0 голосов
/ 02 мая 2010

Может быть, этот перегиб может помочь вам

Связывание данных свойства enum с ComboBox в WPF

0 голосов
/ 01 мая 2010

Скопируйте перечисления, которые вы хотите привязать к массиву, а затем привязать к массиву.

...