2010-06-14 2 views
0

Это должно быть ДЕЙСТВИТЕЛЬНО просто, но я не могу понять это.Служба домена Silverlight RIA. Как просто получить коллекцию сущностей?

я могу связать данные с DataGrid, как это ниже ...

вар контекстную = новый DishViewDomainContext();

это.dataGrid1.ItemsSource = context.Restaurants;

context.Load (context.GetRestaurantsQuery());

. Это работает ... Но теперь я просто хочу эту коллекцию в переменной, которую я могу прокрутить по коллекции ... Это кажется невозможным .. Я делаю это, и там, кажется, ничего нет ... Я не совсем уверен, что 3-я строка. Выполняется метод службы домена, но где он заполняет данные?

 var dc = new DomainService1(); 
     IEnumerable<ApplicationLog> collApplicationLog = dc.ApplicationLogs; 
     dc.Load(dc.GetApplicationLogsQuery()); 

     foreach (ApplicationLog al in collApplicationLog) 
     { 
      int? i = al.ApplicationID; 
     } 
+0

Все это основано на этой статье. http://ajax.sys-con.com/node/1195515 – punkouter

ответ

0

Попробуйте следующее

var collApplicationLog = dc.ApplicationLogs.ToList(); 
+0

ApplicationLogs - это тип EntitySet , поэтому нет ToList(); – punkouter

0

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

Возвращаемое значение dc.Load (...) является объектом LoadOperation, который имеет событие Completed. Вам нужно добавить обработчик событий в событие Completed, чтобы вы были уведомлены о загрузке данных и использовании IEnumerable.

Вот почему: Используя только IEnumerable, вы не будете знать, когда данные прибудут. EntitySet, который вы извлекаете из IEnumerable, также реализует INotifyCollectionChanged. Вот как работает привязка данных XAML к IEnumerable - привязка данных обнаруживается, когда данные поступают, потому что она прослушивает уведомление об изменении коллекции, а затем отправляет и извлекает данные из перечисления.

Ваш цикл foreach не ожидает прибытия данных.

Смежные вопросы