2014-06-23 155 views
2

我有一個Dictionary<int, List<string>>。每個ID(int)都有一個對應的動態名稱列表(List<string>)。WPF:DataGrid中的Dictionary <int,List <string>>

這是Datagrid中的預期輸出。

ID | Name | Name | Name 
1 Ash Tina Kara 
2 Kc  
3 Star Lara 

我該如何做到這一點?

+0

您確定需要'DataGrid'嗎?爲什麼不在自定義模板或其他東西中使用'ListView'。 – icebat

+0

只要可編輯,Listview就可以。 –

回答

5
<DataGrid x:Name="dg" ItemsSource="{Binding Dic}" AutoGenerateColumns="False"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="id" Binding="{Binding Key}"/> 
       <DataGridTextColumn Header="Name" Binding="{Binding Value[0]}"/> 
       <DataGridTextColumn Header="Name" Binding="{Binding Value[1]}"/> 
       <DataGridTextColumn Header="Name" Binding="{Binding Value[2]}"/> 
      </DataGrid.Columns> 
     </DataGrid> 

enter image description here

如果名稱是不是一個固定的數據,你需要動態地添加列如下:

DataGridTextColumn column = new DataGridTextColumn(); 
      column.Header = "name4"; 
      column.Binding = new Binding("Value[3]"); 
      dg.Columns.Add(column); 

沒事,這裏是我的代碼:

<DataGrid x:Name="dg" ItemsSource="{Binding Dic}" AutoGenerateColumns="False"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="id" Binding="{Binding Key}"/> 
      </DataGrid.Columns> 
     </DataGrid> 


private Dictionary<int, List<string>> dic; 

     public Dictionary<int, List<string>> Dic 
     { 
      get { return dic; } 
      set { dic = value; } 
     } 

     public MainWindow() 
     { 
      InitializeComponent(); 
      this.DataContext = this; 
      Dic = new Dictionary<int, List<string>>(); 
      Dic.Add(1, new List<string> { "a", "b", "c", "5" }); 
      Dic.Add(2, new List<string> { "d" }); 
      Dic.Add(3, new List<string> { "e", "f" }); 

      int count = 0; 
      foreach (List<string> lst in Dic.Values) 
      { 
       if (lst.Count > count) 
       { 

        for (int i = count; i < lst.Count; i++) 
        { 
         DataGridTextColumn column = new DataGridTextColumn(); 
         column.Header = "name" + i; 
         column.Binding = new Binding(string.Format("Value[{0}]", i)); 
         dg.Columns.Add(column); 
        } 
        count = lst.Count; 
       } 
      } 


     } 

但我想讓你自己完成它

+0

謝謝,但名稱的列數應該是動態的。它可能超過3個。 –

+0

簡單易行的解決方案,但網格不可編輯。 – icebat

+0

我更新了我的答案 – Rang

0

您是否嘗試綁定到字典的Values集合?將dictionary.Values集合設爲ItemsSource並打開AutoGenerateColumns=True

相關問題