第一步:在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<Item>{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<Item>().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