我有两个属性:
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
属性的'Count'可以等于700,我需要在HeaderOfDataGrid
的{{1}}中显示所有700个集合DataGridTextColumns
。所以,我需要根据DataGrid
属性(集合)创建700 DataGridTextColumns
。此外,如果HeaderOfDataGrid
属性的Count
为700,则HeaderOfDataGrid
属性也具有相同的BodyOfDataGrid
(例如,700)。所以使用硬编码Count
对我来说不方便。
我知道我可以用这种方式绑定:
xaml
但它不是我想要的,因为我想重命名位于Header属性中的标题。
如何在没有硬编码<DataGrid ItemsSource="{Binding Path=Body, Mode=TwoWay}"/>
到xaml
的情况下实施绑定和创建?
答案 0 :(得分:0)
你不能双管齐下。 如果要重命名标题,则必须手动编写代码;否则你会自动执行它并使用它给你的东西。
您可以设置样式,其中标题绑定到基础对象的属性。在这种情况下,它可能有效,但您的BodyOfDataGrid
必须包含Header
属性
答案 1 :(得分:0)
我发现要做的是创建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();
}