C# 从DataContext中删除项目并显示更新后的值而不显示SaveChanges()
我的WPF表单中有一个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> <
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;