首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataTemplate on DataGridColumnHeader WPF C#

DataTemplate on DataGridColumnHeader WPF C#
EN

Stack Overflow用户
提问于 2014-10-01 15:40:11
回答 1查看 919关注 0票数 0

我很难让DataTemplate应用于动态生成列的数据集中的所有列。ItemsSource绑定到VM中的DataTable属性。除了模板之外,其他一切都运行得很好。这都只是概念的初始证明,所以数据是垃圾,但需要帮助来证明概念。

守则如下:

查看:

代码语言:javascript
复制
<DataGrid AutGenerateColumns="true" ItemsSource={Binding xxx} etc...>
    <DataGrid.Columns>                
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.HeaderTemplate>
                    <DataTemplate>
                        <Button Content="ok"/>
                    </DataTemplate>
                </DataGridTemplateColumn.HeaderTemplate>
            </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

ViewModel -目前,我正在创建一个表.显然最终会被DB调用所取代..。

代码语言:javascript
复制
[ImportingConstructor]
    public GenericQueueViewModel()
    {           
        int y = new Random().Next(20);
        TestList = createTableForDataGrid(y);
    }

    private DataTable createTableForDataGrid(int numberOfCols)
    {
        DataTable test = new DataTable();
        for (int i = 0; i < numberOfCols; i++)
        {
            DataColumn oDc = new DataColumn();                
            test.Columns.Add(oDc);
        }
        Random x = new Random();
        int y = x.Next(100);
        for (int i = 0; i <= y; i++)
        {
            DataRow oRow = test.NewRow();
            for (int j = 0; j < test.Columns.Count; j++)
            {
                oRow[j] = i.ToString() + " | " + j.ToString();
            }
            test.Rows.Add(oRow);
        }
        return test;
    }

private DataTable _testList;

    public DataTable TestList
    {
        get { return _testList; }
        set 
        { 
            _testList = value;
            OnPropertyChanged(() => TestList);
        }
    }

其结果是:

这就好像DataGrid最初是用模板创建的,但是当OnPropertyChanged触发时,模板就不会被调用。网格填充得很好,但是没有标题中的按钮。

我需要用StaticResource做点什么才能让它起作用吗?把样式从格子里拉出来?我不太清楚它为什么不起作用。

动态解决方案是强制性的。这是一个队列,它将装载“任何”.可能是5列,也许是200列。所以我不能单独定义列。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-01 17:39:22

您实际上是通过这种方式创建一个额外的列。要解决这个问题,您需要创建自定义列标头模板和设置标头模板的样式。如下所示:

代码语言:javascript
复制
<Style TargetType="DataGridColumnHeader">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate>
        <Button Content="Ok"/>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

<DataGrid AutGenerateColumns="true" ItemsSource={Binding xxx} etc...>

</DataGrid>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26145155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档