我正在尝试实现一个包含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派生的
答案 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();
}