C# 从DataContext中删除项目并显示更新后的值而不显示SaveChanges()

C# 从DataContext中删除项目并显示更新后的值而不显示SaveChanges(),c#,wpf,entity-framework,xaml,mvvm,C#,Wpf,Entity Framework,Xaml,Mvvm,我的WPF表单中有一个DataGrid,它通过绑定显示DataContext中的项目。我添加了一个列,其中包含与ViewModel中的命令绑定的删除按钮,该命令用于从上下文中删除该项,并相应地更新DataGrid XAML <DataGrid ItemsSource ="{Binding Quiz.Questionnaire}" AutoGenerateColumns="False"> <DataGrid.Columns> <

我的WPF表单中有一个
DataGrid
,它通过绑定显示
DataContext
中的项目。我添加了一个列,其中包含与ViewModel中的命令绑定的删除按钮,该命令用于从上下文中删除该项,并相应地更新
DataGrid

XAML

<DataGrid ItemsSource ="{Binding Quiz.Questionnaire}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Vraag" Binding="{Binding Content, Mode=TwoWay}"></DataGridTextColumn>
            <DataGridTextColumn Header="Aantal antwoorden" Binding="{Binding AnswerCount, Mode=OneWay}" IsReadOnly="True"></DataGridTextColumn>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button Content="Delete" Command="{Binding Path=DataContext.DeleteRow, RelativeSource={RelativeSource FindAncestor, AncestorType=DataGrid}}"
                                CommandParameter="{Binding Path=SelectedItem, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
  • 我已经确认代码正确地调用了该方法,因此绑定没有问题
  • 我已经确认,通过单击包含
    DataContext.SaveChanges()
    的按钮,数据库确实得到了正确更新
然而,我想要的是,
DataGrid
在保存更改之前从列表中删除该项。这样,如果我愿意,我仍然可以放弃更改

更新


基本上,我正在尝试创建一个编辑窗口,在该窗口中,我可以按照自己的意愿编辑项目,然后确认我的更改或改变主意,返回到上一个视图并放弃我所做的所有更改

为此,我让编辑窗口的ViewModel创建自己的
DataContext
实例。如果单击“保存更改”按钮,该上下文将发送回上一个窗口,数据库将相应更新,但如果按“放弃更改”,我只需关闭窗口并继续使用旧的未编辑上下文


为了清楚起见,现在我只想让OP中提到的Delete按钮立即(直观地)从
DataGrid
列表中删除它的行

我将向您的item类添加一个属性

bool PendingDelete {get; set;} = false;
然后使用CollectionViewFilter筛选出所有标记为删除的项目。 按delete按钮将标记要删除的项目,并刷新CollectionView


当实际执行commit命令时,查询您的集合中标记为删除的所有项目并对其进行处理。

将您的问答容器设置为
可观察集合。添加或删除项目时,U.I.控件将自动更新。在这种情况下,不需要RaisePropertyChanged()调用。

措辞巧妙的问题upvote,但是您可以对最后一段更具体一点,特别是“这样,如果我愿意,我仍然可以放弃更改”。你的意思是在2步/2个动作中?请详细说明我正在尝试创建一个编辑窗口,在该窗口中,我可以根据需要编辑项目,然后确认我的更改或改变主意,返回到上一个视图并放弃我所做的所有更改。为此,我让编辑窗口的ViewModel创建自己的DataContext实例。如果单击“保存更改”按钮,该上下文将发送回上一个窗口并相应更新数据库,但如果我按“放弃更改”,我只需关闭窗口并继续使用旧的、未编辑的上下文。要清楚,现在我只想立即删除OP中提到的“删除”按钮(可视)它是DataGrid列表中的一行。好的,这已经足够清楚了,DataGrid的一个爪牙会很快出现在您身边。使用相同DbContext的显式事务怎么样?在编辑之前启动事务,但只在“保存”上提交。非常感谢,实际上我已经将我的属性存储为观察表,但我错误地认为我的DATAGRID正在从DbWrand读取数据,没有考虑到这个明显的答案。
bool PendingDelete {get; set;} = false;