数据绑定的DataGrid自定义列标题 [英] Data bound DataGrid with custom column headers

查看:80
本文介绍了数据绑定的DataGrid自定义列标题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题似乎很简单:

一个人怎么可以添加自定义页眉到数据绑定DataGrid的WPF中?

How can one add custom headers to a data bound DataGrid in WPF?

我为什么要问这个问题?嗯,因为我装我的DataGrid有一个动态的ItemsSource(这是在$ C $生成的C-后面),绑定到IEnumerable的名单。这工作完全正常,虽然它使用属性名称作为列标题。

Why am I asking this question? Well, because I've fitted my DataGrid (which is generated in code-behind) with a dynamic itemssource, bound to an ienumerable 'list'. This works perfectly fine, although it uses the property names as column headers.

要提高可读性,我只是想指定自定义页眉进行分栏,但是...
我的想法是与已经定义的列提供一个数据网格,并让ItemsSource的填补行。但是的ItemsSource处理与行,以及列

To improve readability I simply want to assign custom headers to the columns, however... My idea was to supply a datagrid with the columns already defined, and let the itemssource fill the rows. But itemssource deals with the rows, as well as the columns.

我希望你能在这里看到我的问题。帮助是极大的AP preciated!

I hope you can see my problem here. Help is greatly appreciated!

推荐答案

DataGrid类具有配置列生成行为的属性,称为的AutoGenerateColumns(<一href=\"http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.autogeneratecolumns.aspx\"相对=nofollow>链接)。要禁用此行为,只是将其设置为false。

The DataGrid class has a property to configure the column generation behavior, called "AutoGenerateColumns" (link). To disable this behavior just set it to false.

你有你的DataGrid的形状更好地控制,如果你在XAML中做到这一点。举个例子:

You have a better control of the shape of your DataGrid if you do it in xaml. An example:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
    xmlns:local="clr-namespace:WpfApplication1"
    Title="MainWindow"
    Width="525"
    Height="350">
<Grid>                  
    <DataGrid AutoGenerateColumns="False" >
        <DataGrid.Columns>              
            <DataGridTextColumn Header="MyHeader1" Binding="{Binding MyProperty1}"/>
            <DataGridTextColumn Binding="{Binding MyProperty2}">
                <DataGridTextColumn.Header>
                    <Button Content="A button"/>
                </DataGridTextColumn.Header>
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

正如你所看到的,一列定义的标题属性将接受任何内容,文字或控件,如果您想进一步自定义它。

As you can see, the "Header" property of a column definition will accept any content, texts or controls, if you want to customize it further.

修改

如何从code做的背后,在窗口的Loaded事件的一个例子:

An example of how to do it from the code behind, in the Window's Loaded event:

void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        var dataGrid = new DataGrid();
        dataGrid.AutoGenerateColumns = false;

        // For each column you want
        var column1 = new DataGridTextColumn();
        column1.Header = "MyHeader";
        column1.Binding = new Binding("MyProperty");
        dataGrid.Columns.Add(column1);

        // LayoutRoot is the main grid of the Window
        this.LayoutRoot.Children.Add(dataGrid);


        // Let's test to see if the binding is working
        IEnumerable<DummyClass> testEnumerable = new List<DummyClass>(){
            new DummyClass(){MyProperty= "Element1"},
            new DummyClass(){MyProperty= "Element2"},
        };

        dataGrid.ItemsSource = testEnumerable;
    }

这篇关于数据绑定的DataGrid自定义列标题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆