c# - 获取 WPF 数据网格上下文菜单单击行

标签 c# wpf wpfdatagrid wpf-4.0

我有一个 WPF 数据网格

<DataGrid AutoGenerateColumns="False"  Name="dataGrid1"  IsReadOnly="True" >
<DataGrid.Columns>
    <DataGridTextColumn Header="Site" Binding="{Binding Site}" Width="150" />
    <DataGridTextColumn Header="Subject" Binding="{Binding Subject}" Width="310" />
</DataGrid.Columns>
<DataGrid.ContextMenu>
    <ContextMenu>
        <MenuItem Header="Delete" Click="Context_Delete">
            <MenuItem.Icon>
                <Image Width="12" Height="12" Source="Images/Delete.png" />
            </MenuItem.Icon>
        </MenuItem>
    </ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>

我将点击事件处理程序设置为:

private void Context_Delete(object sender, System.EventArgs e)  { }

如何获取单击前上下文菜单所在的行? sender 对象是 System.Windows.Controls.MenuItem,而不是 DataGridRow。如何获取单击上下文菜单的 DataGridRow(我在代码隐藏文件中设置了 DataGrid.ItemSource。)

最佳答案

因此,根据您的示例代码,我假设您将 DataGrid 绑定(bind)到对象的 ObservableCollection,您将其属性 Site 和 Subject 绑定(bind)到 DataGridColumns。

基本上,您需要做的就是弄清楚绑定(bind)到单击的 DataGridRow 的项目是什么,并将其从 ObservableCollection 中删除。下面是一些帮助您入门的示例代码:

private void Context_Delete(object sender, RoutedEventArgs e)
{
    //Get the clicked MenuItem
    var menuItem = (MenuItem)sender;

    //Get the ContextMenu to which the menuItem belongs
    var contextMenu = (ContextMenu)menuItem.Parent;

    //Find the placementTarget
    var item = (DataGrid)contextMenu.PlacementTarget;

    //Get the underlying item, that you cast to your object that is bound
    //to the DataGrid (and has subject and state as property)
    var toDeleteFromBindedList = (YourObject)item.SelectedCells[0].Item;

    //Remove the toDeleteFromBindedList object from your ObservableCollection
    yourObservableCollection.Remove(toDeleteFromBindedList);
}

关于c# - 获取 WPF 数据网格上下文菜单单击行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16822956/

相关文章:

c# - 防伪 token 无法解密 - 同一应用程序在同一服务器上多次使用 - 虚拟目录

c# - 在 ipad mini 中下载图像时,它以编码格式打开

c# - Windows 8 消息框样式 WPF

linq - 如何使用 LINQ-to-SQL 回滚对 WPF DataGrid 控件的更改?

c# - 在 DataGrid 中一致地使用 ICommand 和 InputBindings

c# - WPF MVVM 检索数据网格选定的行

c# - 传递 USPS eVSCertifyRequest 错误,因为在数据库中找不到 MasterMID

c# - DataGridView - 聚焦特定单元格

c# - 关闭选项卡后如何从 DockManager 中删除 LogicalChildren?

wpf - 如何使 WPF ListView 项目水平重复,就像水平滚动条一样?