如何将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"?

如何将DataGridColumn绑定到匿名类型内的属性,作为LINQGroupBy的一部分

因为使用了GroupBy,所以fileListGroup对象的序列,而不是匿名类型的序列。由于您是按匿名对象进行分组的,因此它将位于GroupKey属性中。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]