我正在使用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開發,所以如果這是一個愚蠢的問題,我很抱歉:)