如何在 WPF 中向第二个实体添加 CRUD 操作
How to Add CRUD Operations to a Second Entity in WPF
我正在开发一个 WPF 程序,我使用 EF 和 MVVM。我有两个实体:学生和年级。每个学生可以有多个成绩。我有一个 window 和一个 ViewModel(Student)。我可以使用该程序 add/update/delete 学生信息。当我从数据库中添加成绩时,我可以在屏幕上看到成绩。我不知道如何修改我的程序以允许用户在该屏幕上输入、修改、删除成绩。你能给我一些提示或建议吗?我愿意接受新的架构建议。我应该添加另一个用户控件或类似的东西吗?这是我的程序目前的样子。谢谢。
您应该添加另一个用于升级成绩的视图。我假设您熟悉如何切换视图和视图模型。
在您的第二个视图中,您应该添加一个 ComboBox/ListBox。用来自学生 table.
的内容填充此内容
在你的xaml
<ComboBox ItemsSource={Binding Students} SelectedItem={Binding SelectedStudent} />
在您的视图模型中。
public ObservableCollection Students
{
get { return DatabaseContext.Students.ToList(); }
}
并且当您在组合框中 select 项目时,获取 selected 学生的成绩
private Student _selectedStudent;
public Student SelectedStudent
{
get { return _selectedStudent; }
set
{
_selectedStudent = value;
GetGradesList();
}
}
private void GetGradesList()
{
var grades = DatabaseContext.Grades.Where(g => g.Student = SelectedStudent);
// populate this to grid view like you have done in your current view.
// And for selected row in the grid you will get values in your textboxes, update those values,
// and then upgrade that to the database.
}
public void UpgradeGrade()
{
var grade = DatabaseContext.Grades.FirstOrDefault(g => g == SelectedGrade);
grade.Value = UpdatedValue;
DatabaseContext.SaveChanges();
}
你应该从以一种很好的方式对视图模型建模开始(暂时忘记关于数据库的一切,这与视图模型和视图无关):
public sealed class MainViewModel : INotifyPropertyChanged
{
public ObservableCollection<StudentViewModel> Students {get; set;}
}
public sealed class StudentViewModel : INotifyPropertyChanged
{
public ObservableCollection<GradeViewModel> Grades {get; set;}
public StudentViewModel(){
Grades = new ObservableCollection<GradeViewModel>();
}
}
public sealed class GradeViewModel : INotifyPropertyChanged
{
public string Name { get; set; }
public int Value { get; set; }
}
一旦您对所有内容都进行了很好的建模,您最终就会在某处获得学生名单。
我正在开发一个 WPF 程序,我使用 EF 和 MVVM。我有两个实体:学生和年级。每个学生可以有多个成绩。我有一个 window 和一个 ViewModel(Student)。我可以使用该程序 add/update/delete 学生信息。当我从数据库中添加成绩时,我可以在屏幕上看到成绩。我不知道如何修改我的程序以允许用户在该屏幕上输入、修改、删除成绩。你能给我一些提示或建议吗?我愿意接受新的架构建议。我应该添加另一个用户控件或类似的东西吗?这是我的程序目前的样子。谢谢。
您应该添加另一个用于升级成绩的视图。我假设您熟悉如何切换视图和视图模型。
在您的第二个视图中,您应该添加一个 ComboBox/ListBox。用来自学生 table.
的内容填充此内容在你的xaml
<ComboBox ItemsSource={Binding Students} SelectedItem={Binding SelectedStudent} />
在您的视图模型中。
public ObservableCollection Students
{
get { return DatabaseContext.Students.ToList(); }
}
并且当您在组合框中 select 项目时,获取 selected 学生的成绩
private Student _selectedStudent;
public Student SelectedStudent
{
get { return _selectedStudent; }
set
{
_selectedStudent = value;
GetGradesList();
}
}
private void GetGradesList()
{
var grades = DatabaseContext.Grades.Where(g => g.Student = SelectedStudent);
// populate this to grid view like you have done in your current view.
// And for selected row in the grid you will get values in your textboxes, update those values,
// and then upgrade that to the database.
}
public void UpgradeGrade()
{
var grade = DatabaseContext.Grades.FirstOrDefault(g => g == SelectedGrade);
grade.Value = UpdatedValue;
DatabaseContext.SaveChanges();
}
你应该从以一种很好的方式对视图模型建模开始(暂时忘记关于数据库的一切,这与视图模型和视图无关):
public sealed class MainViewModel : INotifyPropertyChanged
{
public ObservableCollection<StudentViewModel> Students {get; set;}
}
public sealed class StudentViewModel : INotifyPropertyChanged
{
public ObservableCollection<GradeViewModel> Grades {get; set;}
public StudentViewModel(){
Grades = new ObservableCollection<GradeViewModel>();
}
}
public sealed class GradeViewModel : INotifyPropertyChanged
{
public string Name { get; set; }
public int Value { get; set; }
}
一旦您对所有内容都进行了很好的建模,您最终就会在某处获得学生名单。