【问题标题】:How to copy existing column and insert it into datagrid?如何复制现有列并将其插入数据网格?
【发布时间】:2011-08-08 20:20:37
【问题描述】:

我目前有一个数据网格,其中包含每个列的唯一上下文菜单。示例 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}" />

....

在上下文菜单中,我有一个名为“插入列”的项目,其中包含一个列列表,如下所示:

       <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,有没有办法根据标题名称查找列的索引?

感谢您的任何帮助/建议。

【问题讨论】:

    标签: c# wpf xaml mvvm


    【解决方案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);
    }
    

    【讨论】:

    • 感谢您的建议,尽管我的列似乎无法拥有“Key”属性。
    • 我注意到您应该将其定义为资源,即在某些资源字典中,例如&lt;Window.Resources&gt;&lt;!-- Here --&gt;&lt;/Window.Resources&gt;MSDN on Resources
    • 谢谢。我能够取得成果。还有一个问题,“非共享”资源在绑定到数据方面是否有任何限制?如果我要添加一个新的“Person”列,该列是否仍具有与原始相同的双向绑定数据?
    • 它不会有相同的绑定,但我想是相同的。
    猜你喜欢
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    相关资源
    最近更新 更多