2014-09-21 65 views
0

我有实体框架生成的类如下。我的要求是将数据从数据库加载到列表视图中,如果在列表视图中发生任何已检查的更改,请将其存回。wpf mvvm双向数据绑定实体框架

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

沿着同样的路线,我有一个视图,其中包含一个列表视图,用于显示NameLocation以及每行显示选中状态的复选框。所以对于复选框,我写的逻辑示例是CheckBox IsChecked=truemode=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.... 
} 

回答

0

您呼叫的相同属性设定器内的属性。 =器isChecked价值。创建一个专用字段来存储isChecked值。

[MetaDataType(typeof(grid))] 
public partial class DataGrid 
{ 
} 

public class grid:INotifyPropertyChanged 
{ 
    private bool? m_IsChecked; 
    public Nullable<bool> IsChecked 
    get 
    { 
     return IsChecked; 
    } 
    set 
    { 
     if(m_IsChecked != value) 
     { 
      m_IsChecked=value; 
      OnPropertyChanged("IsChecked"); 
     } 
    } 
} 
+0

当我创建这样,我得到一个错误,如没有可映射属性 – nikhil 2014-09-23 21:37:26

+0

器isChecked反正感谢帮助私有字段。我得到了问题解决.. – nikhil 2014-09-23 21:39:45

+0

你的getter看起来不正确。它不应该'返回m_IsChecked;'? – 2017-10-26 20:10:06