具有枚举和空值的 ComboBox
ComboBox with enumeration and null value
我有一个 ComboBox
由枚举的值填充:
<ComboBox ItemsSource="{utils:Enumerate {x:Type models:MyEnum}}"
SelectedItem="{Binding SelectedEnumValue, Converter={StaticResource EnumToStringConverter}}" />
使用 utils:Enumerate
的扩展 class 来获取枚举的值
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
.
这样的枚举值
但我希望组合框具有另一个值 - 一个空值。所以我可以 select none 枚举值和 deselect 以前 selected 值。
如何?
您可以将 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>
如果您以 .NET Framework 为目标,请在命名空间声明中将 System.Runtime
替换为 mscorlib
。
或者您可以向 ProvideValue
方法返回的 string[]
添加另一个 string
。
我有一个 ComboBox
由枚举的值填充:
<ComboBox ItemsSource="{utils:Enumerate {x:Type models:MyEnum}}"
SelectedItem="{Binding SelectedEnumValue, Converter={StaticResource EnumToStringConverter}}" />
使用 utils:Enumerate
的扩展 class 来获取枚举的值
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
.
但我希望组合框具有另一个值 - 一个空值。所以我可以 select none 枚举值和 deselect 以前 selected 值。
如何?
您可以将 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>
如果您以 .NET Framework 为目标,请在命名空间声明中将 System.Runtime
替换为 mscorlib
。
或者您可以向 ProvideValue
方法返回的 string[]
添加另一个 string
。