mvvm框架下对wpf的DataGrid多选,右键操作

第一步:在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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用WPF MVVM模式,我们可以通过以下步骤对DataGrid进行右键单个数据提取: 1. 在ViewModel中定义一个SelectedData属性,用于保存所选数据的引用。 2. 在DataGrid中添加一个命令,该命令在右键单击时被触发。此命令应该使用鼠标事件参数获取所选行的数据,并将其分配给SelectedData属性。 3. 在DataGrid中设置RowStyle,该样式使用上一步中分配的SelectedData属性来确定是否为所选行,从而高亮显示。 以下是一个简单的示例: 在ViewModel类中添加以下代码: ```csharp private object _selectedData; public object SelectedData { get { return _selectedData; } set { _selectedData = value; OnPropertyChanged("SelectedData"); } } public ICommand GetDataCommand { get; set; } public ViewModel() { GetDataCommand = new RelayCommand<object>(GetData); } private void GetData(object parameter) { SelectedData = parameter; } ``` 在XAML中使用以下代码为DataGrid添加右键菜单和行选中样式: ```xaml <DataGrid x:Name="MyDataGrid" ItemsSource="{Binding Data}" AutoGenerateColumns="True"> <DataGrid.Resources> <ContextMenu x:Key="DataGridContextMenu"> <MenuItem Header="Get Data" Command="{Binding Path=GetDataCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=DataContext}"/> </ContextMenu> </DataGrid.Resources> <DataGrid.RowStyle> <Style TargetType="{x:Type DataGridRow}"> <Setter Property="Foreground" Value="Black"/> <Setter Property="Background" Value="Transparent"/> <Style.Triggers> <DataTrigger Binding="{Binding Path=DataContext.SelectedData, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" Value="{Binding}"> <Setter Property="Foreground" Value="White"/> <Setter Property="Background" Value="Blue"/> </DataTrigger> </Style.Triggers> </Style> </DataGrid.RowStyle> <DataGrid.ContextMenu> <StaticResource ResourceKey="DataGridContextMenu"/> </DataGrid.ContextMenu> </DataGrid> ``` 在此示例中,我们使用了一个RelayCommand类来实现命令,它是一个常见的MVVM助手类,可用于在ViewModel中定义ICommand属性并将其分配给XAML中的控件。我们还使用了一个DataContext.SelectedData属性,并在行样式的DataTrigger中使用它来高亮显示所选行。最后,在ContextMenu中定义了一个MenuItem,该MenuItem使用GetDataCommand命令并使用FindAncestor引用DataGridRow来获取所选数据并将其传递给ViewModel中的GetData方法。 以上就是datagrid 右键取得单数据 wpf mvvm的回答。 ### 回答2: 在 WPF MVVM 中,可以通过对 DataGrid 控件进行右键点击来获取选中的单个数据。首先,在视图层中,需要将 DataGrid 控件绑定到 ViewModel 中的一个集合属性,例如: ``` <DataGrid ItemsSource="{Binding DataList}" SelectedItem="{Binding SelectedData}" /> ``` 其中,DataList 是 ViewModel 中的一个 ObservableCollection<T> 类型的属性,用于存储需要在 DataGrid 中显示的数据。SelectedData 则是 ViewModel 中的一个 T 类型的属性,用于存储用户选中的单个数据。 在 ViewModel 层中,需要定义 SelectedData 属性的 get 和 set 方法,并在 set 方法中触发 PropertyChanged 事件,以便在视图层中更新右键菜单或其他相关控件的状态。 然后,在 DataGrid 控件的右键菜单中,可以使用 Command 控件绑定到 ViewModel 中的一个 ICommand 类型的属性或方法。在这个 ICommand 中,可以通过 SelectedData 属性获取当前选中的单个数据,并对其进行相应的操作,例如删除、编辑等。 总之,在 WPF MVVM 中,可以通过在视图层中绑定 DataGrid 控件到 ViewModel 中的集合属性,然后通过选中单个数据来触发 SelectedData 属性的 set 方法,并利用 ICommand 控件来进行相应的操作,从而实现在 DataGrid 中获取单个数据的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值