[英]Silverlight Datagrid how to explicit bind DataGridTextColumn
[英]How to create DataGridTextColumn of DataGrid dynamically and bind it?
我有兩個屬性:
public ObservableCollection<Object> HeaderOfDataGrid {get; set;}
public Observablecollection<Object> BodyOfDataGrid {get; set;}
是否可以將HeaderOfDataGrid
屬性綁定到DataGridTextColumn
? 是的,我知道可以這樣綁定:
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Surname" Binding="{Binding Surname}"/>
<DataGridTextColumn Header="Phone" Binding="{Binding Phone_Number}" />
</DataGrid.Columns>
但是, HeaderOfDataGrid
屬性的“計數”等於700,我需要在DataGridTextColumns
的DataGrid
顯示集合HeaderOfDataGrid
所有700個項目。 因此,我需要基於HeaderOfDataGrid
屬性(集合)創建700個DataGridTextColumns
。 另外,如果HeaderOfDataGrid
Count
屬性為700,則BodyOfDataGrid
屬性也具有相同的Count
(例如700)。 因此,使用硬編碼的xaml
對我來說並不方便。
我知道我可以這樣綁定:
<DataGrid ItemsSource="{Binding Path=Body, Mode=TwoWay}"/>
但這不是我想要的,因為我想重命名Header屬性中的標頭。
如何在沒有將xaml
硬編碼到DataGridTextColumn
情況下實現綁定和創建?
您不能同時擁有這兩種方式。 如果要重命名標題,則必須手動對其進行編碼。 否則,您會自動執行並使用它所提供的功能。
您可能可以設置樣式,其中標題綁定到基礎對象的屬性。 在這種情況下,它可能會起作用,但是您的BodyOfDataGrid
必須包含Header
屬性
我發現要做的是創建DataTable
並將其綁定到DataGrid
:
XAML:
<DataGrid Name="dataGrid" />
后面的代碼:
public MainWindow()
{
InitializeComponent();
PopulateDataGrid();
}
DataTable employeeDataTable = new DataTable();
private void PopulateDataGrid()
{
var _ds = new DataSet("Test");
employeeDataTable = _ds.Tables.Add("DT");
for (int i = 0; i < 10; i++)//create columns
{
if(i==0)
employeeDataTable.Columns.Add("Row");
employeeDataTable.Columns.Add(i.ToString());
}
for (int i = 0; i < 10; i++)//fill data to rows
{
var theRow = employeeDataTable.NewRow();
for (int j = 0; j < 10; j++)
{
if (j == 0)
{
theRow[j] = (i + 1);
continue;
}
if (j % 2 == 0)
theRow[j] = "a";
else
theRow[j] = "b";
}
employeeDataTable.Rows.Add(theRow);
}
dataGrid.ItemsSource = employeeDataTable.AsDataView();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.