如何在自定义控件中为内部DataGrid定义列

时间:2015-07-09 08:01:35

标签: c# wpf datagrid dependency-properties

我正在尝试实现一个包含DataGrid的新控件(XGrid)。

大多数情况下,我通过DependencyProperty直接绑定数据,并将AutoGenerateColumns设置为True

现在,在特定情况下,我需要手动配置DataGrid的列。 我想到了类似的东西:

<local:XGrid AutoGenerateColumns="False" DataContext="{Binding SourceList}">
    <local:XGrid.Columns>
        <DataGridTextColumn Header="T1" Binding="{Binding Path=.Value1}"/>
        <DataGridTextColumn Header="T2" Binding="{Binding Path=.Value2}"/>
        <DataGridTextColumn Header="T3" Binding="{Binding Path=.Value3}"/>
    </local:XGrid.Columns>        
</local:XGrid>

这可能是类似的吗?

---编辑1 ---

XGrid实际上不是从DataGrid派生的

1 个答案:

答案 0 :(得分:1)

更改了我的最后一个答案,因为您的编辑更改了方案....

在这种情况下,您可以公开columns属性并将列设置到其中,然后在构造函数中更改本地集合时,将列添加到主数据网格中。

这样的事情应该有效..

public static readonly DependencyProperty GridColumnsProperty = DependencyProperty.Register("GridColumns", typeof(ObservableCollection<DataGridColumn>), typeof(XGrid));
        public ObservableCollection<DataGridColumn> GridColumns
        {
            get { return (ObservableCollection<DataGridColumn>)GetValue(GridColumnsProperty); }
            set { SetValue(GridColumnsProperty, value); }
        }


public XGrid()
{
        GridColumns = new ObservableCollection<DataGridColumn>();
        GridColumns.CollectionChanged += (x, y) =>
            {
                dataGrid.Columns.Clear();
                foreach (var column in this.GridColumns)
                {
                    dataGrid.Columns.Add(column);
                }
            };
        InitializeComponent();
    }