多个DataGrid列标题的绑定

4
我在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>();

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

如果你要使用一个 Data 对象列表,那么你也会有多个 Items,这对我来说没有太多意义。难道把一个对象列表中的值和列标题分别设置不是更合理吗? - Jerrington
列数是一个可变因素,不能静态设置(标题也是如此)! - SamTh3D3v
你是指在同一个“ItemsSource”中行之间的列数有所不同吗?还是说在“ItemsSource”中列的数量事先并不知道?如果是前者,你将不得不随着行/记录的到来来管理列的集合。 - Mike Strobel
1个回答

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] ...}

etc.


列数可能会根据数据的Count()而变化,我不想在XAML中静态定义它们,但我需要定义一个数据模板,以应用于每个列! - SamTh3D3v
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Sinatr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接