使用枚举作为键将数据绑定到字典中的条目

时间:2012-12-04 22:15:32

标签: c# silverlight windows-phone-7 xaml data-binding

我正在尝试数据绑定到字典中的键,其中键是枚举。我咨询了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}
        };
    }
}

为什么这个数据绑定不起作用?

1 个答案:

答案 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 }">