System.Linq.GroupBy Key不在silverlight中绑定

eba*_*lga 5 c# linq silverlight windows-phone-7.1

list.ItemsSource=db.Templates.GroupBy(t=>t.CategoryName);
Run Code Online (Sandbox Code Playgroud)

在xaml中:

<DataTemplate>
   <TextBlock Text="{Binding Key}" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

在这段代码之后.不要在TextBlock中显示任何文本.我正在改变像这样的Text绑定

<DataTemplate>
   <TextBlock Text="{Binding}" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

TextBlock文本显示如下 System.Linq.Lookup^2+Grouping[System.String,Model.Template]

我正在调试和检查Key属性.这不是空的.

为什么Key不在TextBlock中绑定?

如何在Textblock中显示组标题?

Rob*_*los 6

嗯 - 不幸.原因是因为GroupBy()调用的结果是一个实例System.Linq.Lookup<,>.Grouping. Grouping是类的嵌套类Lookup<,>,但Grouping标记为internal.

Silverlight中的安全限制不允许绑定到非公共类型上定义的属性,即使这些属性是在类实现的公共接口中声明的.您绑定的对象实例属于非公共具体类型这一事实意味着您只能绑定到该类型的任何公共基类上定义的公共属性.

您可以构建一个公共填充程序类作为分组的视图模型:

public class MyGrouping {
  public string Key {get; internal set;}
}

list.ItemsSource=db.Templates.GroupBy(t=>t.CategoryName)
                             .Select(g => new MyGrouping { Key = g.Key });
Run Code Online (Sandbox Code Playgroud)