2

我正在尝试将数据绑定到键是枚举的字典中的条目。我已经咨询过这个问题,但答案对我不起作用。以下是我的代码的非样板部分:


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();
}

一些VM.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}
        };
    }
}

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

4

1 回答 1

1

这不可能。请参阅 http://msdn.microsoft.com/en-us/library/cc645024(v=vs.95).aspx#indexdata

索引器

索引器可用于访问路径中的属性并从列表中获取项目,但有一些明显的限制:

  • 项目清单
  • 支持数字整数索引器。
  • 从 Silverlight 4 开始,支持字符串索引器。
  • 仅支持一维数组索引。

被索引的类型必须实现或继承 IList。(接受列表,因为它实现了 IList。但是不接受 IList。)

数字整数索引通过在属性名称后的括号 ([]) 字符内声明从零开始的索引来指定;例如,雇员 [2]。

属性路径评估首先尝试对集合使用整数索引。如果该索引对集合无效,则 [] 中的信息将作为字符串处理。来自属性路径的字符串索引通常需要一个集合/业务对象,它是一个带有字符串键的字典。字符串索引支持绑定到动态数据对象,其中数据源的 CLR 结构可以更改,但字符串键表示仍然可以由客户端 UI 绑定的数据协定。

验证使用索引器访问附加属性集合的项目,作为其属性路径使用的一部分。应用程序的验证结构可以在模板中声明 UI 状态,这些状态仅在引发验证错误时使用,然后可以引用该上下文中的活动错误对象。例如,以下是访问 Validation.Errors 集合中第一项的绑定的属性路径;属性路径的上下文由 RelativeSource 修改,以便仅在运行时在应用的模板上检查错误:

 <TextBlock Text="{Binding RelativeSource={RelativeSource
    TemplatedParent}, Path=(Validation.Errors)[0].Exception.Message }">
于 2012-12-05T00:25:51.360 回答