gpt4 book ai didi

c# - 从 DataContext 中删除一个项目并在没有 SaveChanges() 的情况下显示更新的值

转载 作者:行者123 更新时间:2023-11-30 16:39:34 26 4
gpt4 key购买 nike

我的 WPF 表单中有一个 DataGrid,它通过 Binding 显示来自 DataContext 的项目。我添加了一个带有删除按钮的列,这些按钮绑定(bind)到 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>

View 模型

public void DeleteRowCommand(object row)
{
if(row is QuestionVM question)
{
_Context.Questions.Remove(question.ToModel);
RaisePropertyChanged(nameof(Quiz.Questionnaire));
}
else if(row is AnswerVM answer)
{
_Context.Answers.Remove(answer.ToModel);
RaisePropertyChanged(nameof(Answers));
}
}
  • 我已确认代码正确调用了该方法,因此 Binding 没有问题。
  • 我已通过单击包含 DataContext.SaveChanges() 的按钮确认数据库已正确更新。

但是,我想要的是 DataGrid 在我保存更改 之前从列表中删除该项目。这样我仍然可以根据需要放弃更改。

更新

基本上我正在尝试创建一个编辑窗口,我可以在其中根据需要编辑项目,然后确认我的更改或改变主意并返回到上一个 View 并放弃我所做的所有更改。

为此,我让我的 Edit 窗口的 ViewModel 创建了它自己的 DataContext 实例。如果我单击Save Changes 按钮,该上下文将发送回上一个窗口并且数据库会相应更新,但如果我按下Discard Changes,我只需关闭该窗口并继续使用旧的、未经编辑的上下文。

明确地说,现在我只想让 OP 中提到的删除按钮立即从 DataGrid 列表中删除(视觉上)它的行

最佳答案

将您的问题和答案容器作为 ObservableCollections。 U.I.添加或删除项目时,控件将自动更新。在这种情况下不需要调用 RaisePropertyChanged()。

关于c# - 从 DataContext 中删除一个项目并在没有 SaveChanges() 的情况下显示更新的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52959046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com