Службы RIA: загрузка не возвращает данных - PullRequest
0 голосов
/ 18 февраля 2011

В примере приложения BookClub от nikhilk Kothary для отображения категорий книг используется поле со списком.

Это похоже на класс viewmodel (приложение использует шаблон MVVM):

private ReferenceDataContext _referenceData;

public BookClubModel () {// Конструктор _referenceData = new ReferenceDataContext ();

_referenceData.Load(_referenceData.GetcategoriesQuery(), false);

}

Тогда существует свойство, для которогоcomboxbox привязан:

public IEnumerable Categories {get {return _referenceData.Categories;}}

Почему это работает?Разве у нас не должен быть «завершенный» обработчик событий для операции загрузки?

Если я хочу заполнить свойство IEnumerable в конструкторе, то оно не работает:

private ReferenceDataContext _referenceData;

private IEnumerable _categories;

public BookClubModel () {// Конструктор _referenceData = new ReferenceDataContext ();

_referenceData.Load(_referenceData.GetcategoriesQuery(), false);

_categories = _referenceData.Categories; _referenceData.Categories was what we were returning in the Categories property above.

}

Почему это так?работать в одном случае, а не в другом?

Даниил

1 Ответ

1 голос
/ 18 февраля 2011

В первом случае Categories является ссылкой на _referenceData.Categories. И когда коллекция _referenceData.Categories была обновлена, Categories также обновлялся.

Во втором случае вам нужен обработчик событий для операции Load, затем делайте что хотите с загруженными сущностями.

Внутренне, когда вы вызываете Load, выполняется запрос к базе данных, а когда извлекается результат, вызывается обратный вызов операции загрузки. Операция загрузки является асинхронной операцией, и вам нужно помнить этот факт

...