O.O*_*.O. 19 c# wpf wpfdatagrid wpf-4.0
我有一个WPF DataGrid
<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>
Run Code Online (Sandbox Code Playgroud)
我有点击事件处理程序:
private void Context_Delete(object sender, System.EventArgs e) { }
Run Code Online (Sandbox Code Playgroud)
如何在单击之前获取上下文菜单所在的行?该sender对象是System.Windows.Controls.MenuItem,不是DataGridRow.如何获取DataGridRow单击上下文菜单的位置.(我DataGrid.ItemSource在代码后面设置文件.)
dsf*_*sho 29
因此,基于您的示例代码,我假设您将DataGrid绑定到ObservableCollection对象,并将属性Site和Subject绑定到DataGridColumns.
基本上,您需要做的就是找出绑定到单击的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);
}
Run Code Online (Sandbox Code Playgroud)
通常,您不处理行(如果您这样做 - 再考虑一下原因) - 而是使用视图模型.当您打开上下文菜单时,您将选择您的项目,因此可以通过DataGrid.SelectedItem属性访问它.但是,如果你真的需要DataGridRow - 你有你的DataGrid.SelectedIndex,这里有很多关于如何获取行的答案.比如在datagrid中获取行
| 归档时间: |
|
| 查看次数: |
34371 次 |
| 最近记录: |