2014-10-01 44 views
0

我無法通過動態生成的列將DataTemplate應用於數據網格中的所有列。 ItemsSource綁定到VM中的DataTable屬性。除了模板以外的其他東西都可以正常工作。這些都只是對概念的初步證明,所以數據是垃圾,但需要幫助進行概念驗證。DataGridColumnHeader上的DataTemplate WPF C#

代碼如下:

查看:

<DataGrid AutGenerateColumns="true" ItemsSource={Binding xxx} etc...> 
    <DataGrid.Columns>     
      <DataGridTemplateColumn> 
       <DataGridTemplateColumn.HeaderTemplate> 
        <DataTemplate> 
         <Button Content="ok"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.HeaderTemplate> 
      </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

視圖模型 - 上的負載,就目前而言,我創建一個表。顯然,最終將與DB調用替換...

[ImportingConstructor] 
    public GenericQueueViewModel() 
    {   
     int y = new Random().Next(20); 
     TestList = createTableForDataGrid(y); 
    } 

    private DataTable createTableForDataGrid(int numberOfCols) 
    { 
     DataTable test = new DataTable(); 
     for (int i = 0; i < numberOfCols; i++) 
     { 
      DataColumn oDc = new DataColumn();     
      test.Columns.Add(oDc); 
     } 
     Random x = new Random(); 
     int y = x.Next(100); 
     for (int i = 0; i <= y; i++) 
     { 
      DataRow oRow = test.NewRow(); 
      for (int j = 0; j < test.Columns.Count; j++) 
      { 
       oRow[j] = i.ToString() + " | " + j.ToString(); 
      } 
      test.Rows.Add(oRow); 
     } 
     return test; 
    } 

private DataTable _testList; 

    public DataTable TestList 
    { 
     get { return _testList; } 
     set 
     { 
      _testList = value; 
      OnPropertyChanged(() => TestList); 
     } 
    } 

而結果:

enter image description here

這就像與模板最初創建的DataGrid,但是當OnPropertyChanged火災時,模板不會被調用。網格填充很好,但沒有標題中的按鈕。

我是否需要使用StaticResource做些事情才能使其發揮作用?將風格拉出網格?我不確定它爲什麼不起作用。

動態解決方案是強制性的。這是一個隊列,將加載「什麼」......也許5列,也許200.所以我不能單獨定義列。

+0

我剛剛注意到在審查雖然,沒有什麼是column0產生,這應該是在column0數據在列1,2 1,等... – Aaron 2014-10-01 15:45:53

回答

1

你實際上是通過這種方式創建一個額外的列。爲了解決這個問題,你需要創建一個樣式來自定義列標題模板並設置標題模板。類似下面:

<Style TargetType="DataGridColumnHeader"> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate> 
     <Button Content="Ok"/> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

<DataGrid AutGenerateColumns="true" ItemsSource={Binding xxx} etc...> 

</DataGrid> 
+0

完美。我早些時候嘗試過,但遇到了一個錯誤,「內容已被設置」。我沒有意識到Style標籤需要進入UserControl.Resources標籤。多一點研究,我想出了它應該放在哪裏。它運作良好。謝謝! – Aaron 2014-10-01 17:45:15