MVVM Light DataGrid DeleteCommand
本文关键字:DeleteCommand DataGrid Light MVVM | 更新日期: 2023-09-27 17:56:05
我的项目的简短结构是(使用 MVVM Light Toolkit):
-
使用数据网格查看 (用户控件)
-
视图模型
-
使用值对象进行数据访问
-
.DB
我正在使用 ObservableCollection 将数据绑定到我的 DataGrid,但我坚持删除数据网格中的一行并将其保存到数据库。
在较旧的项目中,我使用了来自System.Windows.Input的CommandManager.PreviewExecute事件,并在那里检查了DataGrid.DeleteCommand的事件参数。简单地说:
if(e.Command == DataGrid.DeleteCommand)
{
DataAccessContext.Sample.DeleteOnSubmit(data);
DataAccessContext.SubmitChanges();
}
我已经用谷歌搜索了几个小时,但没有找到正确的方法。我尝试使用 PassEventArgsToCommand,但事件 DataGrid.DeleteCommand 或 CommandManager.PreviewExecute 没有触发,SelectionChangedCommand 运行良好,但我不知道如何检查它是否具有重要的 DataGrid.DeleteCommand。
这是我的 xaml:
<DataGrid x:Name="dataGrid1" ItemsSource="{Binding Items}" CanUserAddRows="True" CanUserDeleteRows="True" AutoGenerateColumns="False" Height="391" HorizontalAlignment="Left" VerticalAlignment="Top" Width="auto" Margin="2,0,0,0" RowEditEnding="dataGrid1_RowEditEnding" CellEditEnding="dataGrid1_CellEditEnding">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<cmd:EventToCommand
Command="{Binding SelectionChangedCommand,Mode=OneWay}"
CommandParameter="{Binding SelectedItems,ElementName=dataGrid1}">
</cmd:EventToCommand>
</i:EventTrigger>
<i:EventTrigger EventName="DataGrid.DeleteCommand"> //I've also tried PreviewExecuted and CommandManager.PreviewExecuted as EventName
<cmd:EventToCommand
Command="{Binding SelectedItems,Mode=OneWay}"
CommandParameter="{Binding ExecutedRoutedEventArgs, ElementName=dataGrid1}"
PassEventArgsToCommand="True"
></cmd:EventToCommand>
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name, UpdateSourceTrigger=PropertyChanged}" Width="auto"></DataGridTextColumn>
<DataGridTextColumn Header="Vorname" Binding="{Binding Surname, UpdateSourceTrigger=PropertyChanged}" Width="auto"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
感谢您的回答和最诚挚的问候
尝试禁用 DataGrid 上的删除操作,而是将 Delete 键挂接到命令(通过 KeyBinding),该命令将执行保存并从源集合中删除该行。
看看这个问题。