问题:如何使用MVVM Light和Blend将RIA IEnumerable与嵌套的IEnumberable绑定到Silverlight控件?
设置:我已经设置了RIA服务来使用一个简单的Entity Framework模型,该模型有两个实体Category和Activity;每个类别可以包含许多活动。 域服务有一个函数GetCategoriesWithActivities()返回:
return this.ObjectContext.Categories.Include("Activities");
Model使用DataContext.Load执行查询并返回一个LoadOperation,它具有一个IEnumberable的Entities属性。由于查询包含活动,因此还有一个嵌套的IEnumerable。使用Visual Studio的调试器,我可以看到数据是在IEnumerable中返回的。
我的ViewModel将返回的IEnumerable公开为公共属性。使用MVVM Light将ViewModel设置为Model的DataContext。
当我尝试数据绑定到IEnuberable时,类别成员无法提及嵌套活动的成员。
问题:我的ViewModel应该公开哪种数据类型,以便我可以绑定到类别和嵌套的活动?如何将IEnumerable转换为该类型?我想使用原始的RIA类别和活动对象,以便更改跟踪工作。
PS:我忘了提到我的最终目标是将类别和活动IEnumerables绑定到Accordion控件。答案 0 :(得分: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