2014-11-06 24 views
3

予跨越此代碼樣品在TechNet女巫傳來的顯示如何結合單一列標題的標題和其對應的列中的數據:綁定多個數據網格列標題

<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn> 
      <DataGridTemplateColumn.Header> 
       <TextBlock Text="{Binding DataContext.HeaderNameText, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" /> 
      </DataGridTemplateColumn.Header> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <StackPanel> 
         <TextBlock Text="{Binding}" /> 
        </StackPanel> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

和數據網格的DataContext設置像這樣:

Data data = new Data(); 
data.HeaderNameText = "Header2"; 
data.Items = new List<string>() { "Item1", "Item2" }; 
DataContext = data; 

數據類結構如下:

public class Data 
{ 
    public string HeaderNameText { get; set; } 
    public List<string> Items { get; set; } 
} 

我的問題是如何綁定在DataGrid的ItemSource到多個列中的數據:

List<Data> data=new List<Data>(); 

我期待着得到上述列表中的每個數據元素列,因此如何實現這一目標?

+0

如果你要使用的'名單Data'對象,那麼你就會有多個'Items'以及這沒有什麼意義,我。擁有單獨設置值和列標題的對象列表是不是更明智? – Jerrington 2014-11-06 13:58:03

+0

列數是一個變化因素,不能靜態設置(標題標題也是)! – Usama 2014-11-06 14:01:11

+0

你是說同一個'ItemsSource'中的行數不同嗎?或者只是提前未知「ItemsSource」中的列數?如果前者,你將不得不按行/記錄進行管理一組列。 – 2014-11-06 16:29:01

回答

1

鑑於方法定義只有一個列

<DataGrid> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn ...> 
    </DataGrid.Columns> 
</DataGrid> 

對於你必須將它定義多個列中多次

<DataGrid> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn ...> 
     <DataGridTemplateColumn ...> 
     <DataGridTemplateColumn ...> 
    </DataGrid.Columns> 
</DataGrid> 

如果你像這樣定義

public class Data 
{ 
    public string[] HeaderNameText { get; set; } // array, list, etc. 
    public List<string> Items { get; set; } 
} 

然後列綁定將是類似於

{Binding DataContext.HeaderNameText[0] ...} 
{Binding DataContext.HeaderNameText[1] ...} 

+0

列的數量可能會改變取決於data.Count(),我不想在靜態中定義它們XAML,但我需要定義一個數據模板,將應用於每一列! – Usama 2014-11-06 13:28:03

+0

然後給出的方法將無法正常工作。您可以使用'AutoGenerateColumns = true'並提供列模板(我在這裏可以看到這種方法)或動態生成'Columns'。兩者都需要一些代碼。使用搜索,例如[這裏](http://stackoverflow.com/q/1983033/1997232)(關鍵字是'動態wpf數據列列')。 – Sinatr 2014-11-06 13:32:08