第一步:在DataGrid中添加ContextMenu
XML
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="删除选中项" Command="{Binding DeleteSelectedCommand}" />
</ContextMenu>
</DataGrid.ContextMenu>
第二步:在ViewModel中创建一个命令(DeleteSelectedCommand
)来处理删除选中项的逻辑。确保为ViewModel设置了DataContext。其中Items就是DataGrid中每行的对象集合
cs
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的关联:
cs
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