【发布时间】:2021-10-17 19:22:29
【问题描述】:
我有一个 WPF 窗口来显示培训课程的详细信息,以及数据网格中的参与者列表。
我正在使用 Entity Framework Core,我的训练类模型看起来像这样
public partial class TrainingClass
{
public TrainingClass()
{
TrainingAttendees = new HashSet<TrainingAttendee>();
}
public int ClassId { get; set; } // PK
public DateTime DateFrom { get; set; }
public DateTime DateTo { get; set; }
public string CourseName { get; set; }
public virtual ICollection<TrainingAttendee> TrainingAttendees { get; set; }
}
在我的TrainingClassDetailsViewModel 中,我有一个按钮可以打开一个对话窗口,用户可以在其中输入与会者详细信息并单击“保存”按钮
public void AddAttendee(object parameter)
{
TrainingAttendee attendee = new TrainingAttendee()
TrainingAttendeeViewModel vm = new TrainingAttendeeViewModel(attendee);
_windowService.ShowDialog<TrainingAttendeeEditor>(vm);
if (vm.SaveClicked)
{
_trainingClass.TrainingAttendees.Add(attendee);
}
}
这会添加新的参与者,因此 EF Core 可以在调用 SaveChanges 时更新数据库,但这不会更新数据网格。
我知道我需要使用ObservableCollection,它使用INotifyPropertyChanged。如果我实现以下并改用Attendees.Add(attendee);,这将更新数据网格,但不会更新数据库。
private ObservableCollection<TrainingAttendee> _attendees;
public ObservableCollection<TrainingAttendee> Attendees
{
get => _attendees;
set
{
if (_attendees != value)
{
_attendees = value;
ApplyPropertyChange();
}
}
}
...
_attendees = new ObservableCollection<TrainingAttendee>(_trainingClass.TrainingAttendees);
我能得到的唯一工作方法是同时使用_trainingClass.TrainingAttendees.Add(attendee); 和Attendees.Add(attendee);。但是通过管理 2 个列表,我发现这很奇怪。我需要自己的ApplyPropertyChanged 来代替。
我将如何最好地实现这一点?
【问题讨论】:
标签: c# wpf entity-framework xaml entity-framework-core