2011-01-25 61 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); 

這解決了我的問題。

相關問題