我知道有几种方法可以做到这一点,但我想让它变得更容易,因为我有很多组合框以这种方式绑定。有一个使用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”。我也尝试在名称空间前添加,但它没有帮助。
答案 0 :(得分:5)
最好使用MarkupExtension,this 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
}
}