我正在使用SL4,MVVM Toolkit,Entity Framework 4 & WCF RIA Services。我有一个网格,它的数据源是ObservableCollection<Ticket>
。门票OC由RIA服务人口:一旦ObservableCollection已更新,Datagrid中的项目不会在所有客户端上更新
private void LoadTickets()
{
IsBusy = true;
_Context.Load(_Context.GetOpenTicketsForUserQuery(Session.UserId), GetTicketsCallback, null);
}
private void GetTicketsCallback(LoadOperation<Ticket> lo)
{
ListOfTickets = (ObservableCollection<Ticket>)lo.Entities;
}
当我添加一个新的票据对象到OC的网格显示在所有客户端的新项目,一旦我refreh网格(每30秒我刷新网格每个客户通过致电LoadTickets()
)。如果我从网格中删除一个项目,这也可以工作。但是,当我更新Ticket对象中的属性并保存它(在DataContext上调用SubmitChanges())时,即使在刷新网格后,此更改也不会显示在其他客户端上。我必须在浏览器中刷新整个页面才能看到更改。我在这里读过很多类似的问题,他们都说你必须在你的对象属性和ObservableCollection上实现INotifyPropertyChanged。
但是,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开发,所以如果这是一个愚蠢的问题,我很抱歉:)