【问题标题】:wpf mvvm two way databinding with Entity Frameworkwpf mvvm 与实体框架的两种方式数据绑定
【发布时间】:2014-09-21 19:12:52
【问题描述】:

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

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

同样,我有一个视图,其中包含一个用于显示NameLocation 的列表视图,以及一个用于每行显示选中状态的复选框。所以对于复选框,我编写的逻辑示例是CheckBox IsChecked=true,mode=two way,UpdateSourceTrigger=PropertyChanged。我使用OnCheckedChanged 事件在我的视图模型中调用db.SaveChanges

dbSampleDbContext 类型的对象。但似乎绑定没有发生,即检查的更改没有存储到数据库中。

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

实体框架类:

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....
}

【问题讨论】:

    标签: c# wpf entity-framework mvvm


    【解决方案1】:

    您在属性设置器中调用相同的属性。 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");
            }
        }
    }
    

    【讨论】:

    • 当我创建一个这样的私有字段时,我得到一个错误,比如 IsChecked 没有可映射的属性
    • 您的吸气剂看起来不正确。不应该是return m_IsChecked;吗?
    猜你喜欢
    • 1970-01-01
    • 2021-03-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多