2014-09-21 2 views
0

У меня есть классы, созданные Entity Framework следующим образом. Мое требование состоит в том, чтобы загрузить данные из базы данных в представление списка, и если какие-либо проверенные изменения произойдут в представлении списка, сохраните их обратно.wpf mvvm двусторонняя привязка данных с Entity Framework

Для этой цели в моей модели я написал еще один частичный класс, как показано ниже, который реализует INotifyPropertyChanged. Я хочу использовать классы Entity Framework в качестве моделей.

Вдоль тех же строк у меня есть представление, содержащее вид списка для отображения Name и Location и флажок для каждой строки для отображения состояния проверки. Таким образом, для флажка, пример логики, которую я написал, - CheckBox IsChecked=true, mode=two way, UpdateSourceTrigger=PropertyChanged. Я использую событие OnCheckedChanged для звонка db.SaveChanges в моей модели.

db - объект типа SampleDbContext. Но похоже, что привязка не происходит, т. Е. Проверенные изменения не сохраняются в базе данных.

Почему отмеченные изменения не сохраняются в базе данных?

Entity Framework классы:

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

Когда я создаю частное поле, как я получаю сообщение об ошибке, как Нет назначаемыми собственности для IsChecked – nikhil

+0

В любом случае спасибо за помощь. Я решил проблему. – nikhil

+0

Ваш геттер выглядит не так. Не должно быть 'return m_IsChecked;'? –