В моей WPF форме есть DataGrid
, в котором отображаются элементы из DataContext
через Binding .Я добавил столбец с кнопками удаления, которые связаны с командой в 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>
ViewModel
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));
}
}
- Я подтвердил, что код правильно вызывает метод, поэтому это не проблемас Переплет .
- Я подтвердил, что база данных корректно обновляется, когда я нажимаю кнопку, содержащую
DataContext.SaveChanges()
.
Однако мне нужно, чтобы DataGrid
удаляет элемент из списка до Я сохраняю изменения.Так что я могу отменить изменения, если захочу.
Обновление
В основном я пытаюсь создать окно Edit , в которомЯ могу отредактировать элемент по своему усмотрению, а затем либо подтвердить свои изменения, либо передумать и вернуться к предыдущему виду и отменить все сделанные мной изменения.
Для этого у меня есть Edit окна ViewModel моего окна, создающего свой собственный экземпляр DataContext
.Если я нажимаю кнопку Сохранить изменения , этот контекст отправляется обратно в предыдущее окно, и база данных обновляется соответствующим образом, но если я нажимаю Отменить изменения , я просто закрываю окно и продолжаюсо старым, неотредактированным контекстом.
Для ясности, сейчас я просто хочу, чтобы кнопка «Удалить», упомянутая в OP, немедленно удалила (визуально) свою строку из списка DataGrid
.