0

SL4, MVVM Toolkit, Entity Framework 4 & WCF RIA Services를 사용 중입니다. DataSource가 ObservableCollection<Ticket> 인 표가 있습니다. 티켓 OC는 RIA 서비스에 의해 채워집니다 : 나는 OC에 새로운 티켓 객체를 추가 할 때 내가 그리드를 refreh하면Datagrid의 항목이 ObservableCollection이 업데이트 된 후 모든 클라이언트에서 업데이트되지 않음

private void LoadTickets() 
    { 
     IsBusy = true; 
     _Context.Load(_Context.GetOpenTicketsForUserQuery(Session.UserId), GetTicketsCallback, null); 
    } 

    private void GetTicketsCallback(LoadOperation<Ticket> lo) 
    { 
     ListOfTickets = (ObservableCollection<Ticket>)lo.Entities; 
    } 

그리드는 모든 클라이언트에 새 항목을 보여줍니다 (매 30 초 나는 그리드를 새로 고침 각 클라이언트 LoadTickets()로 전화). 그리드에서 항목을 제거해도 작동합니다. 그러나 Ticket 개체의 속성을 업데이트하고 저장 (DataContext의 SubmitChanges() 호출)하면 그리드를 새로 고친 후에도이 변경 내용이 다른 클라이언트에 표시되지 않습니다. 변경 사항을 보려면 브라우저에서 전체 페이지를 새로 고쳐야합니다. 나는 여기에 많은 비슷한 질문을 읽었으며 여러분 모두는 ObservableCollection뿐만 아니라 객체 프로퍼티에 INotifyPropertyChanged를 구현해야한다고 말한다.

그러나 AFAIK는 Entity Framework에서 자동으로 수행합니다. Model Designer.cs에서 모든 속성을 볼 수 있으며 속성을 설정할 때 모두 PropertyChanged 이벤트를 발생시킵니다. RIA Services를 사용하고 있다는 사실과 관련이 있는지 궁금합니다. 티켓 객체의 속성을 내 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에 익숙하지 않아서 바보 같은 질문 인 경우 사과드립니다. :)

답변

0

Ok -이 밑바닥에 있습니다. 로드() 이벤트에서 나는이 내 문제를 해결 한 LoadBehaviour

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

설정해야합니다.

관련 문제