WPF:如何在Xaml中使用枚举填充组合框

时间:2011-03-11 14:52:24

标签: wpf enums combobox

我知道有几种方法可以做到这一点,但我想让它变得更容易,因为我有很多组合框以这种方式绑定。有一个使用ObjectDataProvider here的建议。问题是我必须为每个枚举创建一个资源条目,这很多。到目前为止,我一直在使用代码隐藏方式,因为它更短:

cmb.ItemsSource = Enum.GetValues(typeof(MyTypes));

我想知道是否可以在Xaml中生成等效项。我以为我们可以使用转换器归档这个。我们可以将类型转换为数组,然后将数组绑定到组合框'ItemsSource。但我不知道如何指定转换器的枚举。这是我的代码:

我的枚举:

public enum MyTypes { Type1, Type2, Type3 }; 

这是我的转换器:

public class EnumToArrayConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return Enum.GetValues(value.GetType());
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null; // I don't care about this
    }
}

我的Xaml资源:

<lib:EnumToArrayConverter x:Key="E2A"/>

以下是如何使用它:

<ComboBox SelectedItem="{Binding MyType}" ItemsSource="{Binding MyTypes, Converter={StaticResource E2A}}"/>

所以,我的问题是如何为转换器指定我的枚举“MyTypes”。我也尝试在名称空间前添加,但它没有帮助。

2 个答案:

答案 0 :(得分:5)

最好使用MarkupExtensionthis one

答案 1 :(得分:3)

CodeNaked发布了一个很好的方法

对于您的工作方法,您可以将转换器更改为Enum.GetValues(value as Type)并使用x:Type语法作为绑定源

ItemsSource="{Binding Source={x:Type local:MyValues},
                      Converter={StaticResource EnumToArrayConverter}}"

<强> EnumToArrayConverter

public class EnumToArrayConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return Enum.GetValues(value as Type);
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null; // I don't care about this
    }
}