2011-11-03 24 views
1

我創建了一個新的實體對象並將其綁定到另一個窗口(編輯窗口)中的控件。修改和保存後,我將一個新的實體對象分配給主窗口中的一個。舊的實體對象綁定到一個數據網格中,現在我想讓datagrid顯示我修改並保存的數據。如何分配上下文並在實體框架中刷新它?

ObjectContext.Refresh Method (RefreshMode, Object)似乎是我想要的,但我不知道如何正確使用它。

簡而言之:
我有數據網格顯示錶中的整個數據的主窗口。用戶可以選擇一行並在編輯窗口中進行編輯。保存後,datagrid應顯示已修改的內容。

+0

你是如何構建你的WPF - 作爲香草/默認項目或MVVM? – ChrisBD

+0

ChrisBD,我拖放一個實體以在mainwindow中生成一個數據網格。對於編輯窗口,我使用查詢設置了一個datacontext。例如:datacontext = MyContext.customer.where(q => q.id.equal(id_selected_from_mainwindow)); – JatSing

回答

1

您最好在這裏使用ObservableCollection作爲數據網格的數據源而不是查詢。

並且看看在你的Customer類中實現INotifyPropertyChanged接口。

ObservableCollection最初由數據庫查詢填充。用戶對ObservableCollection中的元素進行了更改,一旦完成,您只需觸發將更改傳輸到您最初獲得的任何地方Customer對象列表

通過這樣做對客戶和個人客戶對象(如果存在於數據網格中)將自動爲您更新。

編輯

我必須承認,我有點趕到報價上漲此刻任何代碼,但here's一個相當不錯的文章,解釋瞭如何使用ObservableCollections和類實現INotifyPropertyChanged。它也有代碼示例,雖然在VB.NET中應該給你足夠的想法來開始。

實際上,您將代碼分爲獨立層UI(視圖),業務邏輯(視圖模型)和數據層(您的實體框架所在的模型)。

您將數據網格綁定到Customers類中的ObservableCollection類型屬性,並且您的編輯csutomer窗口將作爲您的Customer類的實例綁定。

+0

ChrisBD,請您向我展示一個樣本,以瞭解如何使客戶更新集合從單個客戶對象中更改。 – JatSing

+1

嗨 - 今天沒有足夠的時間編寫和發佈代碼,但看看我在我的答案中添加了鏈接的文章 - 它會解釋更多。 – ChrisBD

+0

即使使用鏈接的示例,我也很難掌握如何使用ObservableCollection檢測從MVVM模式中的單獨窗口對實體對象所做的更改。 ObservableCollection如何知道其中一個項目是否被更改,而View項目與Model項目之間沒有實體對象類型和詳細信息? – Jesslyn