第一步:在DataGrid中添加ContextMenu
- <DataGrid.ContextMenu>
- <ContextMenu>
- <MenuItem Header="删除选中项" Command="{Binding DeleteSelectedCommand}" />
- ContextMenu>
- DataGrid.ContextMenu>
第二步:在ViewModel中创建一个命令(DeleteSelectedCommand)来处理删除选中项的逻辑。确保为ViewModel设置了DataContext。其中Items就是DataGrid中每行的对象集合
- using GalaSoft.MvvmLight;
- using GalaSoft.MvvmLight.Command;
- using System.Collections.ObjectModel;
-
- namespace YourNamespace
- {
- public class MainViewModel : ViewModelBase
- {
- public MainViewModel()
- {
- Items = new ObservableCollection
- {
- new Item { Name = "Item 1" },
- new Item { Name = "Item 2" },
- new Item { Name = "Item 3" }
- };
-
- DeleteSelectedCommand = new RelayCommand(DeleteSelected, CanDeleteSelected);
- }
-
- public ObservableCollection<Item> Items { get; }
-
- public RelayCommand DeleteSelectedCommand { get; }
-
- private bool CanDeleteSelected()
- {
- return dataGrid?.SelectedItems.Count > 0;
- }
-
- private void DeleteSelected()
- {
- foreach (var selectedItem in dataGrid.SelectedItems.Cast
- ().ToList())
- {
- Items.Remove(selectedItem);
- }
- }
-
- private DataGrid dataGrid;
-
- public void SetDataGrid(DataGrid grid)
- {
- dataGrid = grid;
- }
- }
- }
第三步:在MainWindow.xaml.cs中设置DataContext和DataGrid的关联:
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
- DataContext = new MainViewModel();
- (DataContext as MainViewModel)?.SetDataGrid(dataGrid);
- }
- }
总结:xaml中:对DataGrid添加ContextMenu并绑定Command
ViewModel中:设置好Command
xaml的后端:将DataGrid传给ViewModel