2014-06-23 160 views
1

我正在開發基於MVVM的WPF應用程序。我要綁定串列標題即列表,如果列表中包含「ABC」,「XYZ」,「焊接工藝評定」,然後我DataGrid應該有頭ABC,XYZ,PQR三列。這是我綁定數據網格的類。行存儲在ObservableCollection<List<string>>中,其中ObservableCollection的每個元素是形成行的單元格的字符串列表。將DataGrid列綁定到列表

public class Resource 
{ 
    private ObservableCollection<string> columns; 
    public ObservableCollection<string> Columns 
    { 
     get 
     { 
      return columns; 
     } 
     set 
     { 
      columns = value; 
     } 

    } 

    private ObservableCollection<List<string>> row; 
    public ObservableCollection<List<string>> Row 
    { 
     get 
     { 
      return row; 
     } 
     set 
     { 
      row = value; 
     } 
    } 

    public Resource() 
    { 
     List<string> a = new List<string>(); 
     a.Add("1"); 
     a.Add("2"); 
     List<string> b = new List<string>(); 
     b.Add("11"); 
     b.Add("21"); 
     Row = new ObservableCollection<List<string>>(); 
     Row.Add(a); 
     Row.Add(b); 

     Columns = new ObservableCollection<string>(); 
     Columns.Add("Hello"); 
     Columns.Add("World"); 
    } 
} 

我已經在互聯網上搜索了很多,但找不到任何一個工作示例。我真的需要通過這種方法綁定DataGrid

+0

您是否希望能夠對列進行重新排序? – Markus

+0

@Markus我需要每列進行排序而不是重新排序 –

+0

以我的經驗,即使它是可行的使用附加屬性,這種方法太麻煩,太限制,並迫使你移動到程序代碼UI相關的事情,應該真的在XAML中完成。使用特定XAML定義'DataTemplate'的每個數據類型而不是嘗試一個「一刀切」的解決方案,不會真的適合什麼,但很基本的唯一字符串的數據類型。 –

回答

1

您可以通過以下兩種方式之一使用DataGrid:

1)綁定DataGrid的ItemsSource時,其暴露3個屬性ABC,XYZ,PQR元素的集合。

CS:

public List<MyDataItem> DataItems 
    { 
     get 
     { 
      List<MyDataItem> items = new List<MyDataItem>(5); 

      for (int i = 0; i < 5; i++) 
      { 
       items.Add(new MyDataItem { abc = abc[i], qrt = qrt[i], xyz = xyz[i] }); 
      } 

      return items; 
     } 
    } 

    int[] abc = new int[5] { 1, 2, 3, 4, 5 }; 
    int[] qrt = new int[5] { 6,7,8,9,10 }; 
    int[] xyz = new int[5] { 11,12,13,14,15}; 


    public event PropertyChangedEventHandler PropertyChanged = delegate { }; 

} 

public class MyDataItem 
{ 
    public int abc { get; set; } 
    public int qrt { get; set; } 
    public int xyz { get; set; } 
} 

XAML:

<DataGrid ItemsSource="{Binding DataItems}" />  

2)創建一個DataTable對象,並將其綁定到你的ItemsSource。

public DataTable DataTable 
    { 
     get 
     { 
      DataTable table = new DataTable(); 

      table.Columns.Add("abc"); 
      table.Columns.Add("qrt"); 
      table.Columns.Add("xyz"); 

      table.Rows.Add(1, 6, 11); 
      table.Rows.Add(2, 7, 12); 
      table.Rows.Add(3, 8, 13); 
      table.Rows.Add(4, 9, 14); 
      table.Rows.Add(5, 10, 15); 

      return table; 
     } 
    }