MVVM Light привязка к РИА IEnumerable - PullRequest
0 голосов
/ 12 мая 2011

Проблема: Как связать RIA IEnumerable с вложенным элементом IEnumberable в Silverlight с использованием MVVM Light and Blend?

Настройка: Я настроил службы RIA для работы с простой моделью Entity Framework, которая имеет две сущности Category и Activity; где каждая категория может включать в себя множество видов деятельности. Доменная служба имеет функцию GetCategoriesWithActivities (), которая возвращает:

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

Модель использует DataContext.Load для выполнения запроса и возвращает LoadOperation, которое имеет свойство Entities, которое является IEnumberable. Поскольку запрос включает в себя действия, существует также вложенный IEnumerable. Используя отладчик Visual Studio, я вижу, что данные возвращаются в IEnumerable.

Моя ViewModel предоставляет возвращенный IEnumerable в качестве открытого свойства. Используя MVVM Light, ViewModel устанавливается как DataContext модели.

Когда я пытаюсь привязать данные к IEnuberable, члены категории недоступны, не говоря уже о членах вложенных операций.

Вопрос: Какой тип данных должен предоставлять мой ViewModel, чтобы я мог связываться с категориями и вложенными операциями? Как мне преобразовать IEnumerable в этот тип? Я хочу использовать исходные объекты RIA Category и Activity, чтобы отслеживание изменений работало.

PS: я забыл упомянуть, что моей конечной целью является привязка IEnumerables к категориям и действиям к элементу управления Accordion.

1 Ответ

0 голосов
/ 28 мая 2011

Я преобразую свои iEnumerables в ObservableCollections или ICollections в обратном вызове OnLoadOperationCompleted.

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
...