0

我的项目的简短结构是(使用 MVVM Light Toolkit):

  • 使用 DataGrid 查看(用户控件)

  • 视图模型

  • 带有值对象的数据访问

  • D B

我正在使用 ObservableCollection 将数据绑定到我的 DataGrid,但我坚持删除 Datagrid 中的行并将其保存到数据库。

在较旧的项目中,我使用了 System.Windows.Input 中的 CommandManager.PreviewExecuted 事件,并在那里检查了 DataGrid.DeleteCommand 的事件参数。简单地说:

if(e.Command == DataGrid.DeleteCommand)
{
    DataAccessContext.Sample.DeleteOnSubmit(data);
    DataAccessContext.SubmitChanges();
}

我已经用谷歌搜索了几个小时,但没有找到正确的方法。我尝试使用 PassEventArgsToCommand,但事件 DataGrid.DeleteCommand 或 CommandManager.PreviewExecuted 未触发,SelectionChangedCommand 运行良好,但我不知道如何检查重要的 DataGrid.DeleteCommand。

这是我的xml:

<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>

感谢您的回答和最好的问候

4

1 回答 1

0

尝试禁用 DataGrid 上的删除,而是将 Delete 键连接到一个命令(通过 KeyBinding),该命令将执行您的保存并从源集合中删除该行。

看看这个问题

于 2013-11-26T16:57:10.907 回答