gpt4 book ai didi

c# - 从 ViewModel 更新 WPF Datagrid 的 SelectedItem 并将更改反射(reflect)在 Datagrid 中

转载 作者:行者123 更新时间:2023-12-03 10:28:12 33 4
gpt4 key购买 nike

我已经寻找这个问题的解决方案很长时间了,这让我发疯了。我只是似乎没有找到问题所在以及如何解决它。

关于手头的问题:我正在开发一个项目,在该项目中我将 WPF 与 MVVM 模式结合使用。我有一个数据网格,已绑定(bind)到 ViewModel 中的 ObservableCollection 属性。我还将数据网格的 SelectedItem 属性绑定(bind)到 ViewModel 中的 CurrentStudent 属性。

现在,每当我更改他/她的姓名、姓氏、学生编号或电子邮件时,我希望能够在数据库中更新数据网格中任何选定的学生。我可以更新数据库中的学生,因为我可以通过 ViewModel 中的 SelectedStudent 属性访问数据网格中选定的学生。最大的问题是我想直接在我的 ViewModel 中更改此属性,并在我进行更改后立即将所选学生的更改反射(reflect)回数据网格中。但我不能,为了我的一生,弄清楚我做错了什么。起初,为了实现我的目标,我需要做的事情似乎很容易和微不足道,但它就是行不通。我可以让选定的学生进入我的 ViewModel 属性,但我无法使更改在数据网格中可见,除非我关闭 View 并重新加载它并让应用程序从数据库中加载学生,然后我才能看到数据网格的变化。

这是在我的 ViewModel 中不起作用的代码:

EstudianteSeleccionado.Nombres = Nombres;
EstudianteSeleccionado.Apellidos = Apellidos;
EstudianteSeleccionado.Email = Email;
EstudianteSeleccionado.Matricula = Matricula;
bc.actualizarEstudiante(EstudianteSeleccionado);

此代码负责更新所选学生。这是属性 EstudianteSeleccionado 的定义:
private Estudiante _estudianteSeleccionado;
public Estudiante EstudianteSeleccionado
{
get
{
return _estudianteSeleccionado;
}
set
{
if(value != _estudianteSeleccionado)
{
_estudianteSeleccionado = value;
OnPropertyChanged();
}
}
}

正如我已经说过的,这是数据网格 SelectedItem 在我的 View 中绑定(bind)的属性。接下来是数据网格的 XAML:
<DataGrid ItemsSource="{Binding Estudiantes, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" SelectedItem="{Binding EstudianteSeleccionado, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Matr?cula" IsReadOnly="True" Binding="{Binding Matricula, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
<DataGridTextColumn Header="Nombres" IsReadOnly="True" Binding="{Binding Nombres, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
<DataGridTextColumn Header="Apellidos" IsReadOnly="True" Binding="{Binding Apellidos, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
<DataGridTextColumn Header="Email" IsReadOnly="True" Binding="{Binding Email, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</DataGrid.Columns>
</DataGrid>

最后一点:一旦我从 ViewModel 中修改 SelectedStudent 属性并且它确实发生了变化,我检查了我的学生集合是否得到更新。它似乎只是没有通知数据网格其集合中的项目已更改。这是代表学生集合的属性:
public ObservableCollection<Estudiante> Estudiantes 
{
get
{
return _estudiantes;
}
set
{
if (_estudiantes != value)
{
_estudiantes = value;
OnPropertyChanged();
}
}
}

我认为数据网格的 DataGridTextColumn 中的绑定(bind)可能存在问题。也许他们没有收到有关更改的通知,但我几乎尝试了所有设置,但当集合中的项目从 ViewModel 修改时,它没有收到通知。

最佳答案

感谢用户 nnmait,我可以解决我的问题。我的模型类没有实现 INotifyPropertyChanged,只是我的 ViewModels。在我的模型类中实现这个接口(interface)解决了这个问题。

关于c# - 从 ViewModel 更新 WPF Datagrid 的 SelectedItem 并将更改反射(reflect)在 Datagrid 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26645230/

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