[英]DataTemplate on DataGridColumnHeader WPF C#
我在將DataTemplate應用於具有動態生成的列的datagrid中的所有列時遇到麻煩。 ItemsSource綁定到VM中的DataTable屬性。 除模板之外的所有其他東西都可以正常工作。 目前,這只是概念的初步證明,因此數據是垃圾,但是在概念證明方面需要幫助。
代碼如下:
視圖:
<DataGrid AutGenerateColumns="true" ItemsSource={Binding xxx} etc...>
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<Button Content="ok"/>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
ViewModel-現在,在加載時,我正在創建一個表。 顯然最終將被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);
}
}
結果:
就像DataGrid是最初使用模板創建的,但是當OnPropertyChanged觸發時,不會調用模板。 網格可以很好地填充,但是標題中沒有按鈕。
我需要對StaticResource做些什么才能使其正常工作? 將樣式拉出網格? 我不太確定為什么它不起作用。
動態解決方案是強制性的。 這是針對將裝載“無論如何”的隊列的信息……可能有5列,也許有200列。因此,我無法單獨定義列。
您實際上是通過這種方式創建了一個額外的列。 要解決此問題,您需要創建一種樣式以自定義列標題模板並設置標題模板。 如下所示:
<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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.