多个DataGrid列标题的绑定

时间:2014-11-06 11:32:19

标签: c# wpf xaml binding wpfdatagrid

我在TechNet看到了这个代码示例,显示了如何绑定单个列标题标题及其对应的列数据:

<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>   

并且DataGrid的DataContext设置如下:

Data data = new Data();
data.HeaderNameText = "Header2";
data.Items = new List<string>() { "Item1", "Item2" };
DataContext = data;

Data类结构如下:

public class Data
{
    public string HeaderNameText { get; set; }
    public List<string> Items { get; set; }
}

我的问题是如何将DataGrid ItemSource绑定到多个列数据:

List<Data> data=new List<Data>();

我希望获得上面列表中每个数据元素的列,那么如何实现呢?

1 个答案:

答案 0 :(得分:1)

给定方法只定义一列

<DataGrid>
    <DataGrid.Columns>
        <DataGridTemplateColumn ...>
    </DataGrid.Columns>
</DataGrid>

对于多列,您必须多次定义

<DataGrid>
    <DataGrid.Columns>
        <DataGridTemplateColumn ...>
        <DataGridTemplateColumn ...>
        <DataGridTemplateColumn ...>
    </DataGrid.Columns>
</DataGrid>

如果你定义这样的列

public class Data
{
    public string[] HeaderNameText { get; set; } // array, list, etc.
    public List<string> Items { get; set; }
}

然后绑定将类似于

{Binding DataContext.HeaderNameText[0] ...}
{Binding DataContext.HeaderNameText[1] ...}