分享
三行代码  ›  专栏  ›  技术社区  ›  juergen d

带枚举和空值的组合框

  •  0
  • juergen d  · 技术社区  · 3 天前

    ComboBox 由枚举值填充的:

    <ComboBox ItemsSource="{utils:Enumerate {x:Type models:MyEnum}}"
              SelectedItem="{Binding SelectedEnumValue, Converter={StaticResource EnumToStringConverter}}" />
    

    utils:Enumerate ,一个扩展类,以获取枚举的值

    public sealed class EnumerateExtension : MarkupExtension
    {
        public Type Type { get; set; }
        public EnumerateExtension(Type type)
        {
            Type = type;
        }
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            var names = Enum.GetNames(Type);
            string[] values = new string[names.Length];
    
            for (int i = 0; i < names.Length; i++)
            {
                values[i] = StringResources.Get(names[i]); //translating the enum value into a readable text
            }
            return values;
        }
    }
    

    NotReleased .

    但我希望comboxbox有另一个值-空值。因此,我不能选择任何枚举值,也不能取消选择以前选择的值。

    1 回复  |  直到 3 天前
        1
  •  1
  •   mm8    3 天前

    你可以设置 ItemsSource 给一个 CompositeCollection string :

    <ComboBox SelectedItem="...">
        <ComboBox.ItemsSource>
            <CompositeCollection xmlns:s="clr-namespace:System;assembly=System.Runtime">
                <s:String>(empty)</s:String>
                <CollectionContainer Collection="{Binding Source={utils:Enumerate {x:Type models:MyEnum}}}" />
            </CompositeCollection>
        </ComboBox.ItemsSource>
    </ComboBox>
    

    System.Runtime 具有 mscorlib 在命名空间声明中,如果您的目标是.NET框架。

    或者你可以再加一个 一串 string[] 从您的 ProvideValue 方法。