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

How do I define columns for inner DataGrid in a custom control

我正在尝试实现一个包含 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 派生出来的

由于您的编辑改变了场景,因此更改了我的最后一个答案....

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

像这样的东西应该有用..

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();
    }