2010-03-08 59 views
0

想象我有一個實體:實體框架和綁定同步

public class MyObject 
{ 
    public string Name { get; set; } 
} 

而且我有一個列表框:

<ListBox x:Name="lbParts"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

我把它綁定到後臺代碼的集合:

ObjectQuery<MyObject> componentQuery = context.MyObjectSet; 
Binding b = new Binding(); 
b.Source = componentQuery; 
lbParts.SetBinding(ListBox.ItemsSourceProperty, b); 

然後點擊一個按鈕,我將一個實體添加到MyObjectSet中:

var myObject = new MyObject { Name = "Test" }; 
context.AddToMyObjectSet(myObject); 

以下是問題 - 此對象需要在UI中更新爲。但它不添加有:(

+0

請參閱http://stackoverflow.com/questions/7528400/ef-code-first-binding-to-listbox/7532473#7532473 – juFo

回答

1

ObjectQuery<T>類不實現INotifyCollectionChanged接口,因此它不通知用戶界面,當一個項目被添加或刪除。你需要使用ObservableCollection<T>這是副本您ObjectQuery<T>;當您添加一個項目到ObjectQuery<T>,也把它添加到ObservableCollection<T>

綁定:

private ObservableCollection<MyObject> _myObjects; 
... 

_myObjects = new ObservableCollection(context.MyObjectSet); 
Binding b = new Binding(); 
b.Source = _myObjects; 
lbParts.SetBinding(ListBox.ItemsSourceProperty, b); 

添加項目:

var myObject = new MyObject { Name = "Test" }; 
context.AddToMyObjectSet(myObject); 
_myObjects.Add(myObject); 
+0

感謝您的幫助。 – Jefim

0

BookLibrary示例應用程序正在使用EntityObservableCollection。這樣你總是可以更新兩個世界:WPF和實體框架。

您可以在這裏下載示例應用程序:WPF Application Framework (WAF)