Entity Framework - Code First, DbSet.Local не обновляется в пользовательском интерфейсе - PullRequest
1 голос
/ 30 января 2011

У меня есть Code First, CTP5 data context.У меня есть приложение WPF с DataGrid.Я устанавливаю его DataContext следующим образом:

dataGrid.DataContext = _context.Customers.Local;

, затем добавляю несколько сущностей, используя

_context.Customers.Add(customer1); and so on
_context.SaveChanges();

Затем я даю этим клиентам (список клиентов) другой класс для выполнения некоторыхработать над ними.

customerUpdater.Update(customers);

Это занимает много времени и обновляет свойства каждого клиента во время его работы.например,

foreach(var customer in customers) { customer.Name = "updated name"; }

Я не вижу этих обновлений в моем интерфейсе WPF!Все, что я вижу, это оригинальный список неизмененных клиентов.Customers.Local - это ObservableCollection, поэтому я не понимаю, почему я не вижу обновлений в пользовательском интерфейсе.

Я не хочу вызывать SaveChanges () каждый раз, когда происходит обновление свойства, этобудет почти постоянно.Может кто-нибудь сказать мне, почему это не будет обновлять?

1 Ответ

3 голосов
/ 30 января 2011

Если Customers.Local является observableCollection, и вы обновляете свойство "name" одного из их элементов, вы не видите обновлений, потому что вы не изменяете наблюдаемую коллекцию, поэтому вы изменяете значение свойства одного из элементов (клиента), присутствующего в observableCollection, но observableCollection не будет отправлять какие-либо уведомления в пользовательский интерфейс, поскольку он остается неизменным (он имеет такое же количество элементов)

Если вы хотите, чтобы пользовательский интерфейс уведомлялся при обновлении имени свойства клиента, вам нужно создать класс клиента для реализации интерфейса INotifyPropertyChanged.

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

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