在命名空间 X
中,我有一个公共(public)枚举定义:
namespace X
{
public enum MyEnum
{ val0=0, val1, val2, val3, val4 }
}
在命名空间 Y
中,我有一个类具有 X.MyEnum
类型的属性
using namespace X;
namespace Y
{
class Container
{
public MyEnum MYEnum
{ get { return m_myenum; } set { m_myenum = value; } }
private MyEnum m_myenum;
}
}
我创建了一个包含ComboBox
的用户控件。我非常想将它(TwoWay)数据绑定(bind)到“容器”的 MYEnum
字段。用户控件驻留在窗口中。
我该如何实现?我看过一些使用 ObjectDataProvider
的示例,但是我迷路了。
最佳答案
您可以通过使用返回枚举的所有值的自定义标记扩展来定义 ComboBox
的 ItemsSource
(这与使用 实现相同的结果ObjectDataProvider
,但使用起来更简单):
[MarkupExtensionReturnType(typeof(Array))]
public class EnumValuesExtension : MarkupExtension
{
public EnumValuesExtension()
{
}
public EnumValuesExtension(Type enumType)
{
this.EnumType = enumType;
}
[ConstructorArgument("enumType")]
public Type EnumType { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
return Enum.GetValues(EnumType);
}
}
并将 SelectedItem 绑定(bind)到您的 MYEnum 属性:
<ComboBox ItemsSource="{local:EnumValues local:MyEnum}" SelectedItem="{Binding MYEnum, Mode=TwoWay}" />
(local
XML 命名空间必须映射到您的 C# 命名空间)
关于c# - WPF : Binding a combo-box to an enum property of a class object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1914402/