2011-05-12 3 views
0

문제점 : MVVM Light 및 Blend를 사용하여 중첩 된 IEnumberable과 중첩 된 IEnumberable을 Silverlight 컨트롤에 바인드하는 방법은 무엇입니까?MVVM 라이트 바인딩을 RIA IEnumerable

설치 : 두 엔터티 범주 및 활동이있는 간단한 Entity Framework 모델을 사용하도록 RIA 서비스를 설정했습니다. 각 카테고리에는 많은 활동이 포함될 수 있습니다. 도메인 서비스를 반환하는 함수 GetCategoriesWithActivities() 가지고

return this.ObjectContext.Categories.Include("Activities"); 

모델이 쿼리를 실행할 DataContext.Load 사용하고 IEnumberable 인 엔티티 속성을 갖는 LoadOperation를 반환한다. 쿼리에는 활동이 포함되어 있으므로 중첩 된 IEnumerable도 있습니다. Visual Studio의 디버거를 사용하면 데이터가 IEnumerable에 반환되는 것을 볼 수 있습니다.

내 ViewModel은 반환 된 IEnumerable을 공용 속성으로 제공합니다. MVVM Light를 사용하면 ViewModel이 모델의 DataContext로 설정됩니다.

IEnuberable에 데이터 바인딩을 시도 할 때 중첩 된 활동의 멤버는 말할 것도없고 Category 멤버도 사용할 수 없습니다.

질문 : 내 ViewModel에서 범주 및 중첩 된 활동에 바인딩 할 수있는 데이터 형식은 무엇입니까? IEnumerable을 해당 형식으로 변환하려면 어떻게해야합니까? 원래 RIA 범주 및 활동 개체를 사용하여 변경 내용 추적이 작동하도록하고 싶습니다.

추 신 : 궁극적 인 목표는 범주 및 활동 IEnumerables를 Accordion 컨트롤에 바인딩한다는 것입니다.

답변

0

내 iEnumerables를 OnLoadOperationCompleted 콜백의 ObservableCollections 또는 ICollections로 변환합니다.

public void onQuestionsLoaded(LoadOperation<Questions> lo) 
     { 
      if (!lo.HasError) 
      { 
       ICollection<Questions> q = new ObservableCollection<Questions>(lo.Entities); 
       var action = (Action<ICollection<Questions>>)lo.UserState; 
       action.Invoke(q); 
      } 
      else