我是WPF的新手。我正在使用MVVM开发应用程序。我需要构建一个datagrid,其中列标题应该绑定到List或集合。并且列数应该等于列表中元素的数量,其中各个标题为List元素。
我从MSDN获得此示例代码。
MainWindow.xaml
<Grid>
<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>
</Grid>
MainWindow.xaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Data data = new Data();
data.HeaderNameText = "Header2";
data.Items = new List<string>() { "Item1", "Item2" };
this.DataContext = data;
}
}
这里HeaderNameText是一个字符串,我需要它作为List来生成Column,每个Header作为列表的元素。
我搜索得很多,找不到任何有用的东西
答案 0 :(得分:0)
您应该使用DataGridColumn.HeaderTemplate
Property,而不是使用DataGridColumn.Header
属性。尝试这样的事情:
<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridColumn.HeaderTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Text="{Binding DataContext.HeaderNameText, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
<ListBox ItemsSource="{Binding DataContext.Items, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</Grid>
</DataTemplate>
</DataGridColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding}" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
我不确定这是否会实现你想要的,因为Items
集合中的项目数会影响DataGrid
所拥有的行数和不列数。