【问题标题】:Binding of DataGrid column header to a list of String or Collection将 DataGrid 列标题绑定到字符串或集合列表
【发布时间】:2014-06-20 20:48:41
【问题描述】:

我是 WPF 新手。我正在使用 MVVM 开发应用程序。我需要构建一个数据网格,其中列标题应绑定到列表或集合。并且列数应该等于列表中以相应标题为列表元素的元素数。

我从 MSDN 获得了这个示例代码。

http://code.msdn.microsoft.com/Binding-of-DataGrid-column-73f80f68/sourcecode?fileId=74132&pathId=179795492

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 作为列表的一个元素。

我找了很多,找不到有用的东西

【问题讨论】:

    标签: c# wpf xaml mvvm datagrid


    【解决方案1】:

    您应该使用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 拥有的行数,而不会列数。

    【讨论】:

      猜你喜欢
      • 2012-02-12
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 2011-04-13
      • 2014-08-13
      • 2013-08-06
      • 2013-12-17
      • 1970-01-01
      相关资源
      最近更新 更多