C# 绑定多个DataGrid列标题
我在witch遇到了这个代码示例,它展示了如何绑定单个列标题及其相应的列数据:C# 绑定多个DataGrid列标题,c#,wpf,xaml,binding,wpfdatagrid,C#,Wpf,Xaml,Binding,Wpfdatagrid,我在witch遇到了这个代码示例,它展示了如何绑定单个列标题及其相应的列数据: <DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTemplateColumn> <DataGridTemplateColumn.Header> &
<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.Header>
<TextBlock Text="{Binding DataContext.HeaderNameText, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding}" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
List<Data> data=new List<Data>();
DataGrid的DataContext设置如下:
Data data = new Data();
data.HeaderNameText = "Header2";
data.Items = new List<string>() { "Item1", "Item2" };
DataContext = data;
数据数据=新数据();
data.HeaderNameText=“Header2”;
data.Items=newlist(){“Item1”,“Item2”};
数据上下文=数据;
数据类结构如下所示:
public class Data
{
public string HeaderNameText { get; set; }
public List<string> Items { get; set; }
}
公共类数据
{
公共字符串HeaderNameText{get;set;}
公共列表项{get;set;}
}
我的问题是如何将DataGrid ItemSource绑定到多列数据:
<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.Header>
<TextBlock Text="{Binding DataContext.HeaderNameText, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding}" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
List<Data> data=new List<Data>();
列表数据=新列表();
我希望上面列表中的每个数据元素都有一列,那么如何实现呢?给定的方法只定义了一列
<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn ...>
</DataGrid.Columns>
</DataGrid>
等等。列的数量可能会根据数据而变化。Count(),我不想在xaml中静态地定义它们,但我需要定义一个应用于每列的数据模板!那么给定的方法就行不通了。您可以使用
AutoGenerateColumns=true
并提供列模板(我在这里的某个地方见过这种方法),或者动态生成列。两者都需要一些代码。例如,使用搜索(关键字是动态的wpf datagrid列
)。如果要使用数据
对象列表,那么您也会有多个项
,这对我来说没有什么意义。有一个单独设置了值和列标题的对象列表不是更明智吗?列的数量是一个变化因素,不能静态设置(标题也可以设置)!您是说同一itemsource
中不同行的列数不同吗?或者干脆说,ItemsSource
中的列数事先不知道?如果是前者,则必须在行/记录进入时管理列集。
{Binding DataContext.HeaderNameText[0] ...}
{Binding DataContext.HeaderNameText[1] ...}