2011-05-25 31 views
3

我正在使用實體框架4/WPF/C#。 new ObservableCollection<Entity>(context.EntitySet)綁定到XAML中的WPF DataGrid。這工作正常。但是當我以編程方式創建一個新的實體並將其添加到上下文時,DataGrid保持不變。我該怎麼做才能讓DataGrid更新?在實體框架中綁定不更新DataGrid 4

+1

你能告訴我們XAML的綁定和數據上下文對象的代碼嗎? – user7116 2011-05-25 16:15:23

回答

2

由於ObservableCollection<T>在施工過程中僅從實體集合中獲取這些值,因此您沒有看到更新。對實體集的所有其他更改均未「觀察到」。

只有致電ObservableCollection<T>.Add(等)纔會生成CollectionChanged事件。

+0

太棒了,你已經救了我一天。 – Cartesius00 2011-05-25 19:01:13

0

我沒有看到silverlight提到所以我猜你沒有使用RIA服務。 你如何將對象添加到上下文中? .AddTo {EntitySetName]() 或{} EntitySetNme。新增()

如果直接綁定到數據上下文,我相信後面的選項是你最好的選擇。 就我個人而言,我會避而不談,因爲您的表示層直接與您的數據層交談。您應該在處理添加實體的UI層(業務層)與UI綁定集合和持久性之間建立一個分隔線。

+0

我綁定到ObservableCollection(context.EntitySet)。我的新實體在上下文中是正確的,但DataGrid沒有更新。我正在使用MVVM模式。 – Cartesius00 2011-05-25 16:17:12

0

以及它的所有權利;)數據網格應該如何知道您將項目添加到您的上下文中?如果向可觀察集合中添加項目,只會通知數據網格。

所以如果你添加項目做你的上下文,只需爲你的集合屬性調用OnPropertyChanged(「YourEntityCollectionPropertyHere」)。

+0

聽起來不錯,但不起作用。我在上下文中添加了實體,上面沒有任何ObservableCollection,然後調用PropertyChanged(「MyObservableCollection」)並沒有任何反應。請,你有任何其他的想法? – Cartesius00 2011-05-25 17:46:08

1

正如sixlettervariables所說,您使用的構造函數將獲取context.EntitySet值並將它們全部添加到新的ObservableCollection中。添加你的context.EntitySet不會添加到項目的重複列表。

你能展示你的EntitySet是如何定義的嗎?是否有可能使其成爲ObservableCollection並直接綁定到它?