Entity Framework & Binding Sync - PullRequest
       14

Entity Framework & Binding Sync

0 голосов
/ 08 марта 2010

Представьте, что у меня есть сущность:

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

И у меня есть ListBox:

<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);

Вот проблема - этот объект необходимо обновить в пользовательском интерфейсе до. Но он там не добавляется: (

Ответы [ 2 ]

1 голос
/ 08 марта 2010

Класс 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 голосов
/ 21 марта 2010

Пример приложения BookLibrary использует EntityObservableCollection. Таким образом вы всегда обновляете оба мира: WPF и Entity Framework.

Пример приложения можно загрузить здесь: WPF Application Framework (WAF) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...