我有一个 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/