我需要将枚举绑定到DataGridTemplateColumn中的组合框,但只需要enum具有的一些选项。
示例:
枚举选项:
未知,一个,两个,三个,四个,全部< / b>
可绑定的:一个,两个,三个,四个
有什么办法吗?
非常感谢。
祝你好运
答案 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)