如何在自定义控件中为内部 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();
}
我正在尝试实现一个包含 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();
}