2015-12-04 111 views
1

我有更新數據從我的數據源(數據庫通過實體fw)到wpf-windows的問題。我生成使用實體框架文件,因此我從DATEBASE這樣accesing數據:WPF <->實體綁定

public partial class sampleWindow : Window 
    { 
     myEntity en = new myEntity(); 
     public sampleWindow() 
     { 
      InitializeComponent(); 
      Bind(); 
     } 

     private void Bind() 
     { 
      var list = from o in en.table select o; 
      someDatagrid.ItemsSource = list.ToList(); 
     } 

這種方法,首先,足夠以我的節目,我是令人耳目一新「綁定」方法後,我是在做一些操作數據庫,所以我的數據網格或組合中的數據是新鮮的。當我在不同的wpf-windows中更改數據庫時發生問題。我讀過我應該實現可觀察的接口並使用load來代替itemsSource。我試圖做到這一點,但我是begginer,我的嘗試表現慘淡。有人可以一步一步告訴我,我該怎麼辦?

回答

1

您需要一個Singleton來管理您的數據,並結合使用ObservableCollection來公開數據。當集合被任何視圖改變時,它將通知任何訂閱者觀察,並且它們將自動更新。

見:在XAML應用程序的Singleton

0

first part) 示例您可能需要使用一個單獨爲你的實體所提到的夏普忍者的實例可綁定列表的例子。他在他發佈的鏈接中的文章做了很好的解釋。你會想使用一個可觀察的集合來綁定你的ItemSource。當一個項目被添加到Observable集合或從Observable集合中移除時,UI將自動得到通知。你將遇到的問題是,沒有一個.ToObservableCollection() 擴展方法內置到.net,所以你將不得不實現自己的。

我使用這個擴展方法

public static ObservableCollection<T> ToObservableCollection<T>(
     this IEnumerable<T> enumeration) 
    { 
     return new ObservableCollection<T>(enumeration); 
    } 

所以,現在你的綁定方法可以將您的ItemSource設置爲觀察集合

private void Bind() 
    { 
     var list = from o in en.table select o; 
     someDatagrid.ItemsSource = list.ToObservableCollection(); 
    } 
0

有很多更好的辦法(MVVM模式)來完成這個比你的方法。爲了簡單起見,可以這樣做:

//Gets the Load() extention method available for DbSet 
    using System.Data.Entity; 

     private void Bind() 
     { 
      myEntity.table.Load(); 
      /*Local returns an obvervable collection convenient for data binding. 
      This is a synchronized local view of your data. It means any item added , deleted and updated will be reflected in your controls.*/ 
      var obsColl = myEntity.table.Local; 
      someDatagrid.ItemsSource = obsColl; 
     } 
相關問題