2011-05-12 100 views
0

问题:如何使用MVVM Light和Blend将嵌套IEnumberable的RIA IEnumerable绑定到Silverlight控件?MVVM Light绑定到RIA IEnumerable

设置:我已经设置了RIA服务来使用一个简单的Entity Framework模型,该模型有两个实体Category和Activity;每个类别可以包含许多活动。 域服务有一个功能GetCategoriesWithActivities()返回:

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

模型使用DataContext.Load来执行查询,并返回其具有实体属性,该属性是一个IEnumberable一个LoadOperation。由于查询包含活动,所以还有一个嵌套的IEnumerable。使用Visual Studio的调试器,我可以看到数据正在IEnumerable中返回。

My ViewModel将返回的IEnumerable公开为公共属性。使用MVVM Light,ViewModel被设置为模型的DataContext。

当我尝试将数据绑定到IEnuberable时,类别的成员不可用,不提及嵌套活动的成员。

问题:什么数据类型应该我的ViewModel公开,以便我可以绑定到类别和嵌套的活动?如何将IEnumerable转换为该类型?我想使用原始的RIA类别和活动对象,以便更改跟踪可以正常工作。 PS:我忘了提及我的最终目标是将类别和活动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