2013-04-04 76 views
1

我有一個數據綁定列表框,它是使用EF 4.1模型首先構建的。所以我所有的課程都是爲我而建的。因爲我有三個控件反映了從外鍵追溯的表數據。 this.lstBox2.ItemSource = entityContext.TableObject2.ToList()將返回每個記錄。不是M-D顯示的外鍵約束所限制的記錄。向EF 4.1添加記錄並不反映在列表框

TableObject2 class2 = new TableObject2(); 
class2.value1 = 0; 
class2.value2 = "new location"; 

using (TKOEntities entityContext = new TKOEntities()) 
{ 
       entityContext.TableObject2.AddObject(class2); 
       entityContext.SaveChanges(); 
       this.lstBox2.ItemsSource = null; 
} 

SaveChanges確實將數據更新到數據庫中。但是控件不刷新(this.lstBox2.Refresh()不起作用)。如果我嘗試將值設置爲控件。我也得到美國ItemControl.ItemSource錯誤。如何將控件的更新值分配給entitycontext?

回答

0

相反的:

this.lstBox2.ItemsSource = null; 

嘗試從的EntityContext獲取數據保存更改後重建你的清單:

this.lstBox2.ItemsSource = entityContext.TableObject2.ToList(); 

有一個更好的方法,你可以採取我敢肯定,但爲了快速將數據綁定從數據庫中移出並列入列表中,這應該起作用。

而且快速的代碼位,你可以使用對象初始化:

TableObject2 class2 = new TableObject2 { value1 = 0, value2 = "new location" }; 
+0

this.lstBox2.ItemsSource = entityContext.TableObject2.ToList();將返回所有內容並重新加載控件中的數據,但它是一切,並不限於Master-Detail在第一個控件上選擇的內容。 – 2013-04-04 16:43:28

+0

然後,您需要在執行ToList()之前應用選擇過濾器,並傳遞第一個控件具有的選定值。 – crizzwald 2013-04-04 16:45:27

+0

或使用Include方法並傳遞TableObject2作爲其選擇器以通過fk獲取相關的TableObject2對象。 var obj = entityContext.MDTable.Include(「TableObject2」)。FirstOrDefault(x => x.Id = slected.Id); this.lstBox2.ItemsSource = obj.TableObject2s.ToList(); – crizzwald 2013-04-04 16:52:10

1

模型更改不會自動傳播到視圖模型或視圖(我可以看到你沒有MVVM查看模型?)

您通常需要Bind和做PropertyChanged

這是從一個設備寫作和非常粗糙和快速(我可能打錯東西等)......

<ListBox ItemsSource={Binding YourCollectionProperty} > 

在「視圖模式」(或者,如果這是你的「控制」,我不推薦,然後像做{Binding ElementName=_mywin, Path=YourCollectionProperty})定義屬性爲...

public ObservableCollection<POCOItem> YourCollectionProperty 
{ 
get 
{ 
    return _collection ?? (_collection = WrapModel()); 
} 
set 
{}} 

當你的模型更新實施IPropertyChanged interface ...

_collection = null; 
OnPropertyChanged("YourCollectionProperty"); 

ObservableCollection在這裏沒用(一個數組/列表會做同樣的事 - 保持模型集合同步並不容易。所以,如果你需要與你的模型緊密聯繫 - 你可以讓你的模型導航屬性ICollectionObservableCollection(雖然有優點和缺點,但不能進入)。

例如看到這一個Do I need to implement INotifyPropertyChanged when using EF Code-First?

在這種情況下 - 當只是添加新的項目 - 應該自動到你ListBox。

如果刷新集合 - 然後做上述(爲的PropertyChanged集合屬性集)

Item Properties are not automatically updated - 除非你對你的模型實現IPropertyChanged爲好。