SL4、MVVM Toolkit、Entity Framework 4 & WCF RIA Servicesを使用しています。私はグリッドのDataSourceが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に新しいチケットオブジェクトを追加すると、私はグリッド(私は、グリッドをリフレッシュし、30秒ごとにrefreh一度グリッドは、すべてのクライアントに新しい項目を示してい各クライアントはLoadTickets()
と呼んでください)。これは、グリッドから項目を削除する場合にも機能します。しかし、Ticketオブジェクトのプロパティを更新してSave(DataContextでSubmitChanges()を呼び出す)すると、グリッドを更新した後でもこの変更が他のクライアントに表示されません。変更を確認するには、ブラウザ内のページ全体を更新する必要があります。私はここで多くの似たような質問を読んできました。皆さんはオブジェクトのプロパティとObservableCollectionにINotifyPropertyChangedを実装する必要があると言います。
しかし、AFAIKはEntity Frameworkによって自動的にこれを行います。 Model Designer.csのすべてのプロパティを見ることができ、プロパティが設定されているときにPropertyChangedイベントが発生します。私はこれがRIAサービスを使用しているという事実と何か関係があるのかどうか疑問に思っています。チケットオブジェクトから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の新機能ですので、これが愚かな質問であれば謝罪してください:)