ADO.NET DataServices с Призмой - PullRequest
       13

ADO.NET DataServices с Призмой

0 голосов
/ 18 ноября 2009

Я начал использовать призму с Silverlight 3, но мы пытаемся реализовать ее для работы с ADO.NET DataServices. Тип запроса «DataServiceQuery», необходимый для использования с Silverlight, требует, чтобы после запроса выполнялся асинхронный вызов. Это сломает образец Призмы, что я вижу. Любые идеи, чтобы получить только данные запроса для использования в Prism Pattern? Поправьте меня, если я ошибаюсь!

Ответы [ 2 ]

1 голос
/ 18 ноября 2009

Выполнение асинхронного вызова к вашему серверу не нарушает «шаблон призмы». Когда вашему представлению необходимо запросить сервер, его viewmodel запускает асинхронный запрос и предоставляет обратный вызов. После вызова обратного вызова он обрабатывает результат и обновляет все свойства, которые он предоставляет представлению. Это приведет к обновлению представления в соответствии с настройками, установленными в xaml.

0 голосов
/ 18 ноября 2009

PL совершенно верно. На самом деле не существует шаблонов, которые Prism поддерживает, несовместимых с ADO.NET Data Services. Есть только несколько вещей, которые вы должны знать.

Вот небольшой образец. Это немного сложно ... событие complete иногда запускается за пределами потока пользовательского интерфейса, поэтому вам нужно обработать его с диспетчером (по крайней мере, в SL2, который вы сделали):

public class MyViewModel : BaseViewModel
{

     public Customer CustomerResult
     {
         ...
     }

     NorthwindEntities svcContext = null;
     public MyViewModel()
     {
            svcContext =
                new NorthwindEntities(new Uri("Northwind.svc", UriKind.Relative));

            DataServiceQuery<Customers> query =
                svcContext.Customers.Expand("Orders");

            // Begin the query execution.
                query.BeginExecute(WorkComplete, query);

     }



     private void WorkComplete(IAsyncResult result)
     {
          DataServiceQuery<Customers> query =
                    result.AsyncState as DataServiceQuery<Customers>;

          Customers returnedCustomer =
                    query.EndExecute(result).FirstOrDefault();

          //Execute with the dispatcher
          Dispatcher.CurrentDispatcher.BeginInvoke( () =>
          {
               CustomerResult = returnedCustomer;
          });
     }
}

Конечно, здесь нет обработки исключений, но, надеюсь, вы получите картину.

...