wpf-mvvm与实体框架的双向数据绑定

本文关键字:数据绑定 框架 实体 wpf-mvvm | 更新日期: 2023-09-27 18:23:53

我有实体框架生成的类,如下所示。我的要求是将数据库中的数据加载到列表视图中,如果列表视图中发生任何已检查的更改,请将其存储回。

为此,在我的模型中,我编写了另一个实现INotifyPropertyChanged的分部类,如下所示。我想使用我的实体框架类作为模型。

沿着相同的行,我有一个包含用于显示NameLocation的列表视图的视图,以及用于显示选中状态的每行的复选框。因此,对于复选框,我编写的逻辑示例是CheckBox IsChecked=truemode=two wayUpdateSourceTrigger=PropertyChanged。我使用OnCheckedChanged事件来调用视图模型中的db.SaveChanges

CCD_ 9是CCD_。但绑定似乎没有发生,即检查的更改没有存储到数据库中。

为什么选中的更改没有保存到数据库?

实体框架类:

public partial class Datagrid
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Location { get; set; }
    public Nullable<bool> IsChecked { get; set; }
}
public partial class SampleDbContext : DbContext
{
    public SampleDbContext() : base("name=SampleDbContext")
    {}
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
    public virtual DbSet<Datagrid> Datagrids { get; set; }
}

我在模型中的自定义类:(这是一个示例代码,可能有一些拼写错误,但请忽略它)

[MetaDataType(typeof(grid))]
public partial class DataGrid
{}
public class grid:INotifyPropertyChanged
{
    public Nullable<bool> IsChecked 
    {   
        get { return IsChecked; }
        set
        {
            IsChecked=value;
            OnPropertyChanged("IsChecked");
        }
    }   
    //INotifyPropertyChanged Implementation....
}

wpf-mvvm与实体框架的双向数据绑定

您正在属性setter中调用相同的属性。IsChecked=值。创建一个专用字段来存储isChecked值。

[MetaDataType(typeof(grid))]
public partial class DataGrid
{
}
public class grid:INotifyPropertyChanged
{
    private bool? m_IsChecked;
    public Nullable<bool> IsChecked  
    get
    {
        return m_IsChecked;
    }
    set
    {
        if(m_IsChecked != value)
        {
            m_IsChecked=value;
            OnPropertyChanged("IsChecked");
        }
    }
}