我正在使用WPF程序,我使用EF和MVVM。我有两个实体:学生和成绩。每个学生可以有多个成绩。我有一个窗口和一个ViewModel(学生)。我可以使用该程序添加/更新/删除学生信息。当我从数据库中添加成绩时,我可以在屏幕上看到成绩。我不知道如何修改我的程序以使用户能够在该屏幕上输入,修改和删除成绩。你能给我一些提示或建议吗?我对新的架构建议持开放态度。我应该添加另一个用户控件或类似的东西吗?这是我的程序目前的样子。感谢。
答案 0 :(得分:1)
您应该添加另一个视图来升级成绩。我假设您熟悉如何切换视图和视图模型。
在第二个视图中,您应该添加一个ComboBox / ListBox。用学生表填充这个。
在你的xaml
中<ComboBox ItemsSource={Binding Students} SelectedItem={Binding SelectedStudent} />
在您的视图模型中。
public ObservableCollection Students
{
get { return DatabaseContext.Students.ToList(); }
}
当你在组合框中选择项目时,获得所选学生的成绩
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();
}
答案 1 :(得分:1)
你应该首先以一种很好的方式对视图模型进行建模(暂时忘记关于数据库的所有内容,这与viewmodels和amp; views无关):
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; }
}
一旦你很好地模仿了一切,你最终会在某个地方找到学生名单。