如何在 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; }
}

一旦您对所有内容都进行了很好的建模,您最终就会在某处获得学生名单。