簡體   English   中英

wpf mvvm與實體框架的兩種方式數據綁定

[英]wpf mvvm two way databinding with Entity Framework

我有如下由實體框架生成的類。 我的要求是將數據庫中的數據加載到列表視圖中,如果列表視圖中發生任何已檢查的更改,請將其存儲回去。

為此,在我的模型中,我編寫了下面的另一個實現INotifyPropertyChanged局部類。 我想將實體框架類用作模型。

同樣,我有一個視圖,其中包含用於顯示NameLocation的列表視圖,以及用於顯示已選中狀態的每一行的復選框。 因此,對於復選框,我編寫的邏輯示例為CheckBox IsChecked=truemode=two wayUpdateSourceTrigger=PropertyChanged 我使用OnCheckedChanged事件在視圖模型中調用db.SaveChanges

dbSampleDbContext類型的SampleDbContext 但是似乎綁定沒有發生,即檢查的更改沒有存儲到數據庫中。

為什么檢查的更改未保存到數據庫?

實體框架類:

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

您正在屬性設置器中調用同一屬性。 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");
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM