WPF - ComboBox 和 ListBox 的 ItemsSource 自动绑定 enum 值集合
前言WPF 的 ComboBox 控件等绑定 enum 值很繁琐,很让人头疼,网上也有提供了一些方法,基本是使用 ObjectDataProvider 方式和 MarkupExtension 方式,
有没有办法绑定值为 enum 类型就自动加载所有枚举值选项,下面记录一种方法;
实现方式
主要通过附加属性,根据绑定的 Selecter.SelectedItem 属性,获取属性类型,再获取枚举值的集合了,下面是实现代码:
添加附加属性 ItemsControlHelper.EnumValuesToItemsSourceProperty
public class ItemsControlHelper
{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>/// <summary>
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>/// 绑定 enum 类型所有值给 ItemsSource 赋值
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>/// 必须绑定 SelectedItem
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>/// </summary>
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>public static readonly DependencyProperty EnumValuesToItemsSourceProperty = DependencyProperty.RegisterAttached(
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>"EnumValuesToItemsSource", typeof(bool), typeof(ItemsControlHelper), new PropertyMetadata(default(bool), OnEnumValuesToItemsSourceChanged));
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>public static void SetEnumValuesToItemsSource(DependencyObject element, bool value)
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>element.SetValue(EnumValuesToItemsSourceProperty, value);
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>public static bool GetEnumValuesToItemsSource(DependencyObject element)
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>return (bool)element.GetValue(EnumValuesToItemsSourceProperty);
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>private static void OnEnumValuesToItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>if (d is ItemsControl itemsControl && GetEnumValuesToItemsSource(itemsControl))
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>if (itemsControl.IsLoaded)
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>SetComboBoxItemsSource(itemsControl);
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>else
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>itemsControl.Loaded += ComboBox_Loaded;
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>private static void SetComboBoxItemsSource(ItemsControl itemsControl)
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>var itemsBindingExpression = BindingOperations.GetBinding(itemsControl, ItemsControl.ItemsSourceProperty);
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>if (itemsBindingExpression != null)
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>throw new InvalidOperationException("When using ItemsControlHelper.EnumValuesToItemsSource, cannot be used ItemsSource at the same time.");
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>if (itemsControl.Items.Count > 0)
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>throw new InvalidOperationException("When using ItemsControlHelper.EnumValuesToItemsSource, Items Collection must be null");
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>var bindingExpression = BindingOperations.GetBindingExpression(itemsControl, Selector.SelectedItemProperty);
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>if (bindingExpression == null)
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>throw new InvalidOperationException("ItemsControl must be binding SelectedItem property");
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>var binding = bindingExpression.ParentBinding;
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>var dataType = bindingExpression.DataItem?.GetType();
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>var propertyInfo = dataType?.GetProperty(binding.Path.Path);
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>if (propertyInfo == null)
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>return;
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>var propertyType = propertyInfo.PropertyType;
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>if (!propertyType.IsEnum)
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>var underlyingType = Nullable.GetUnderlyingType(propertyType);
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>if (underlyingType == null)
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>return;
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>propertyType = underlyingType;
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>var itemsSourceBinding = new Binding();
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>itemsSourceBinding.Source = Enum.GetValues(propertyType);
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>itemsSourceBinding.Mode = BindingMode.OneWay;
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>itemsControl.SetBinding(ItemsControl.ItemsSourceProperty, itemsSourceBinding);
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>private static void ComboBox_Loaded(object sender, RoutedEventArgs e)
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>var itemsControl = (ItemsControl)sender;
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>itemsControl.Loaded -= ComboBox_Loaded;
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>SetComboBoxItemsSource(itemsControl);
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}
}
viewmodel 代码创建 枚举类型属性
public class MainViewModel : ObservableObject
{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>private Animal animal;
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>public Animal Animal
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>get { return animal; }
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>set { SetProperty(ref animal, value); }
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}
}
public enum Animal
{
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>Dog = 0,
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>Cat,
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>Elephant,
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>Bird,
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>Lion,
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>Tiger
}前端 xaml 代码,将 ComboBox.SelectedItem 绑定枚举属性,并设置 ItemsControlHelper.EnumValuesToItemsSource="True"
<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>运行代码,自动加载枚举值集合到 ComboBox.ItemsSource
https://img2022.cnblogs.com/blog/1768414/202209/1768414-20220930103203085-395649562.png
还可以添加 TypeConverter 的方式显示为自定义字符串,新增一个 EnumDescriptionConverter .cs
public class EnumDescriptionConverter : EnumConverter{<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>public EnumDescriptionConverter(Type type)<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>: base(type)<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>///<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid> public override object ConvertTo(ITypeDescriptorContext? context, CultureInfo? culture, object? value, Type? destinationType)<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>if (destinationType == typeof(string))<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>if (value != null)<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>FieldInfo? fieldInfo = value.GetType()!.GetField(value.ToString()!);<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>if (fieldInfo != null)<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>var attribute = fieldInfo.GetCustomAttribute(inherit: false);<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>if (attribute != null)<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>{<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>return !string.IsNullOrEmpty(attribute.Description) ? attribute.Description : value.ToString()!;<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>return value.ToString()!;<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>return string.Empty;<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>}}枚举添加 Attribute 注释内容
public enum Animal{<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>Dog = 0,<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>Cat,<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>Elephant,<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>Bird,<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>Lion,<Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid><Grid>
<ComboBox Width="120"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:ItemsControlHelper.EnumValuesToItemsSource="True"
SelectedItem="{Binding Animal}" />
</Grid>Tiger}再次运行代码结果
https://img2022.cnblogs.com/blog/1768414/202209/1768414-20220930110632890-2112373056.png
同理继承 Selector 的控件也可以使用,例如 ListBox :
https://img2022.cnblogs.com/blog/1768414/202209/1768414-20220930111025290-717671524.png
总结
最后只需要添加一行代码 local:ItemsControlHelper.EnumValuesToItemsSource="True",就可以自动绑定 ItemsSource,xaml 代码不需要再去关注 enum 的类型。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]