如何将DataGridColumn绑定到匿名类型内的属性,作为LINQGroupBy的一部分
本文关键字:属性 作为 一部分 LINQGroupBy 类型 DataGridColumn 绑定 | 更新日期: 2023-09-27 17:59:54
我有一个WPF项目,它包含一个DataGrid。这是网格:
<DataGrid Name="dgMyGrid" AutoGenerateColumns="False" Height="120">
<DataGrid.Columns>
<DataGridTextColumn Header="File Name" Binding="{Binding source}" />
<DataGridTextColumn Header="Count" Binding="{Binding count}" />
</DataGrid.Columns>
</DataGrid>
正如您所看到的,我希望将第一列绑定到名为"source"的属性,将第二列绑定到一个名为"count"的属性。
我的数据网格数据源是这样创建的:
var fileList = listFlaws.OrderBy(x => x.sourceFile)
.GroupBy(y => new {
sourcePath = y.sourceFilePath,
source = y.sourceFile,
count = listFlaws.Where(z => z.sourceFilePath == y.sourceFilePath).Count()
});
dgMyGrid.ItemsSource = fileList;
当我尝试绑定到匿名类型中的属性时,数据网格为空。但是,我似乎能够绑定到listFlaws中类型的属性,例如sourceFile。不幸的是,匿名类型的全部目的是尝试为我提供一种绑定count属性的方法。
那么,我如何绑定到匿名类型中的属性,主要是"source"answers"count"?
因为使用了GroupBy
,所以fileList
是Group
对象的序列,而不是匿名类型的序列。由于您是按匿名对象进行分组的,因此它将位于Group
的Key
属性中。GroupBy
就是这样做的:选择器lambda返回一个键,GroupBy
返回/yits/无论Group
对象的序列是什么,表示由选择器给它的任何一组键分组的原始序列。
<DataGridTextColumn Header="File Name" Binding="{Binding Key.source}" />
<DataGridTextColumn Header="Count" Binding="{Binding Key.count}" />
Group
本身是可枚举的。如果要将其绑定到某个ItemsSource
,则会枚举listFlaws
中按该Group
的匿名键入键值分组的项(如果您关心这些项的话)。
例如,
var evenOdd = Enumerable.Range(1, 6)
.GroupBy(y => (y & 1) == 0)
;
这将产生以下两组的序列:
Group.Key == false
((IEnumerable)Group) == [1, 3, 5]
Group.Key == true
((IEnumerable)Group) == [2, 4, 6]