MVVM Light绑定到RIA IEnumerable

时间:2011-05-12 19:03:58

标签: data-binding linq-to-entities ienumerable ria mvvm-light

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

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

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控件。

1 个答案:

答案 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