2011-01-25 54 views
0

我正在使用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开发,所以如果这是一个愚蠢的问题,我很抱歉:)

回答

0

好的 - 我已经到了这个底部。在Load()事件中,我需要设置LoadBehaviour

_Context.Load(_Context.GetOpenTicketsForUserQuery(Session.UserId), LoadBehavior.MergeIntoCurrent, GetTicketsCallback, null); 

这解决了我的问题。

相关问题