2016-08-03 52 views
1

我有一個WPF項目,其中包含一個DataGrid。這裏是電網:作爲LINQ GroupBy的一部分,如何將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> 

正如你所看到的,我希望能在第一列綁定到一個名爲「源」,第二列到一個名爲「計數」財產一樣。

爲DataGrid我的數據源創建這樣的:

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屬性的方法。

那麼如何綁定到匿名類型的屬性,主要是'源'和'計數'?

回答

1

因爲您使用了GroupBy,fileList是一個Group對象的序列,而不是您的匿名類型的序列。由於您正在按匿名對象進行分組,因此將位於GroupKey屬性中。這就是GroupBy所做的:選擇器lambda返回一個鍵,並且GroupBy返回/產生/不管一系列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] 
+1

感謝。完全忘記我需要'鑰匙'一詞! – sr28

相關問題