在命名空间X
中,我有一个公共枚举定义:
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)数据绑定到“容器”的MYEnum
字段。 usercontrol驻留在窗口中。
我如何实现这一目标?我见过ObjectDataProvider
的一些例子,但是我迷路了。
答案 0 :(得分:6)
您可以使用自定义标记扩展来定义ItemsSource
的{{1}},该扩展会返回枚举的所有值(这与使用ComboBox
的结果相同,但它是更简单使用):
ObjectDataProvider
将SelectedItem绑定到MYEnum属性:
[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);
}
}
(<ComboBox ItemsSource="{local:EnumValues local:MyEnum}" SelectedItem="{Binding MYEnum, Mode=TwoWay}" />
XML名称空间必须映射到您的C#名称空间)