1

列挙型を DataGridTemplateColumn 内にあるコンボボックスにバインドする必要がありますが、列挙型が持つオプションの一部のみです。
例:
列挙オプション: Unknow , One , Two , Three , Four , All
バインド可能なもの: One , Two , Three , Four

これを行う方法はありますか?
どうもありがとう。

よろしくお願いします

4

3 に答える 3

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();
    }
}
于 2010-05-03T04:56:37.937 に答える
0

このねじれがあなたを助けることができるかもしれません

列挙型プロパティを WPF の ComboBox にデータバインドする

于 2010-05-02T02:39:01.370 に答える
0

配列にバインドする列挙型をコピーしてから、配列にバインドします。

于 2010-05-01T19:47:41.143 に答える