Я использую SL4, MVVM Toolkit, Entity Framework 4 и WCF RIA Services.У меня есть сетка, чей источник данных ObservableCollection<Ticket>
.OC Ticket заполняется службой RIA:
private void LoadTickets()
{
IsBusy = true;
_Context.Load(_Context.GetOpenTicketsForUserQuery(Session.UserId), GetTicketsCallback, null);
}
private void GetTicketsCallback(LoadOperation<Ticket> lo)
{
ListOfTickets = (ObservableCollection<Ticket>)lo.Entities;
}
Когда я добавляю новый объект Ticket в OC, сетка отображает новый элемент на всех клиентах после обновления сетки (каждые 30 секунд я обновляюсетка для каждого клиента по телефону LoadTickets()
).Это работает, если я удаляю элемент из сетки.Однако, когда я обновляю свойство в объекте Ticket и сохраняю его (вызываю SubmitChanges () для DataContext), это изменение НЕ отображается на других клиентах даже после обновления сетки.Я должен обновить всю страницу в браузере, чтобы увидеть изменения.Я прочитал много подобных вопросов здесь, и все они говорят, что вы должны реализовать INotifyPropertyChanged в свойствах вашего объекта, а также в ObservableCollection.
Но AFAIK Entity Framework делает это автоматически!?Я вижу все свои свойства в Model Designer.cs, и все они вызывают событие PropertyChanged, когда свойство установлено.Мне просто интересно, это как-то связано с тем, что я использую RIA Services?Я попытался добавить свойство из моего объекта Ticket в мои метаданные службы RIA и вызвать событие RaisePropertyChanged (), но оно тоже не сработало.
[MetadataTypeAttribute(typeof(TicketMetadata))]
public partial class Ticket
{
internal sealed class TicketMetadata : NotifiableObject
{
[Required]
[StringLength(255, MinimumLength=15)]
public string TicketSummary
{
get { return TicketSummary; }
set
{
TicketSummary = value;
RaisePropertyChanged("TicketSummary");
}
}
}
}
Может кто-нибудь пролить свет на это для меня?Это сводит меня с ума!!Я новичок в Silverlight Development, поэтому извиняюсь, если это глупый вопрос :)