如何复制现有列并将其插入datagrid?

时间:2011-04-19 16:36:27

标签: c# wpf xaml mvvm

我目前有一个数据网格,其中包含每列的唯一上下文菜单。示例xaml如下:

  <DataGrid.ColumnHeaderStyle>
        <Style TargetType="DataGridColumnHeader">
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
            <Setter Property="ContextMenu" Value="{StaticResource default_columnHeaderMenu}" />
        </Style>
    </DataGrid.ColumnHeaderStyle>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Person" Binding="{Binding Path=PersonID}" CellStyle="{StaticResource CenterAlignedCellStyle}" />

...

在上下文菜单中,我有一个名为“Insert column”的项目,然后包含一个列表,如下所示:

       <ContextMenu  x:Key="default_columnHeaderMenu" Name="defaultColumnHeaderMenu">
            <MenuItem Header="Insert Column" >
                <MenuItem Header="Person ID" Click="addColumn"/>
                <MenuItem Header="Health" />
                <MenuItem Header="Person Description" />
                <MenuItem Header="Person Age" />

.....

我的问题是,使用列标题上下文菜单,将这些列添加或复制到数据网格中的最简单方法是什么? (我不是在寻找一个全新的,空白的专栏,而是某个已经退出的专栏的“复制”,带有相同的数据等。)

使用DataGrid.Columns,有没有办法根据标题名称找到列的索引?

感谢您提供任何帮助/建议。

1 个答案:

答案 0 :(得分:1)

您可以将列定义为非共享资源:

<DataGridTextColumn x:Key="PersonColumn" x:Shared="False" Header="Person" Binding="{Binding Path=PersonID}" CellStyle="{StaticResource CenterAlignedCellStyle}" />

然后在菜单项事件中,您可以检索它并将其添加到DataGrid:

private void MenuItem_Click(object sender, RoutedEventArgs e)
{
    var col = FindResource("PersonColumn") as DataGridTemplateColumn;
    dataGrid.Columns.Add(col);
}