我正在尝试数据绑定到字典中的键,其中键是枚举。我咨询了this question,但答案对我不起作用。以下是我的代码的非样板部分:
SomePage.xaml:
<!-- Here I try all the ways I can think of. None of them produce any text -->
<TextBlock Text="{Binding Data[0]}" />
<TextBlock Text="{Binding Data[EnumValueA]}" />
<TextBlock Text="{Binding Data[SomeEnum.EnumValueA]}" />
<TextBlock Text="{Binding Data[(local:SomeEnum)EnumValueA]}" />
<TextBlock Text="{Binding Data[(local:SomeEnum)SomeEnum.EnumValueA]}" />
SomePage.xaml.cs:
public SomePage() {
DataContext = new SomeVM();
InitializeComponent();
}
SomeVM.cs:
public enum SomeEnum {
EnumValueA, EnumValueB
}
public class SomeVM {
public Dictionary<SomeEnum, int> Data { get; private set; }
public SomeVM() {
Data = new Dictionary<SomeEnum, int> {
{SomeEnum.EnumValueA, 1337}
};
}
}
为什么这个数据绑定不起作用?
答案 0 :(得分:1)
这是不可能的。见http://msdn.microsoft.com/en-us/library/cc645024(v=vs.95).aspx#indexdata
索引
索引器可用于访问路径中的属性并获取 列表中的项目,但有一些明显的限制:
- 列表项
- 支持数字整数索引器。
- 从Silverlight 4开始,支持字符串索引器。
- 仅支持一维数组索引。
被索引的类型必须实现或继承IList。 (列表是 接受了,因为它实现了IList。然而IList不是 接受。)
通过声明从零开始指定数字整数索引 属性名称后括号内的索引([])字符;对于 员工[2]。
属性路径评估首先尝试对a使用整数索引 采集。如果该索引对集合无效,那么 []中的信息作为字符串处理。字符串索引来自 属性路径通常需要一个集合/业务对象 带字符串键的字典。字符串索引支持绑定 动态数据对象,其中数据源的CLR结构可以 更改,但字符串键表示仍然可以的数据协定 受客户端UI约束。
验证使用索引器访问附加属性的项目 集合作为其属性路径使用的一部分。验证 应用程序的结构可以在模板中声明UI状态 仅在引发验证错误时使用,然后可以使用 引用该上下文中的活动错误对象。例如, 以下是访问第一个绑定的绑定的属性路径 Validation.Errors集合中的项目;财产的背景 path由RelativeSource修改,以便仅检查错误 在运行时应用的模板:
<TextBlock Text="{Binding RelativeSource={RelativeSource
TemplatedParent}, Path=(Validation.Errors)[0].Exception.Message }">