ADO.NET DataServices with Prism

时间:2009-11-18 16:15:27

标签: silverlight prism wcf-data-services

我开始在silverlight 3中使用prism,但是,我们正在尝试实现它以使用ADO.NET DataServices。与Silverlight一起使用所需的“DataServiceQuery”查询类型要求在查询后触发Asyncronous调用。这将打破我所能看到的棱镜模式。 任何想法只获取在Prism模式中使用的查询数据?如果我错了,请纠正我!

2 个答案:

答案 0 :(得分:1)

对服务器进行异步调用不会破坏“Prism Pattern”。当您的视图需要查询服务器时,其viewmodel会触发异步请求并提供回调。一旦调用了回调,它就会处理结果并更新它向视图公开的任何属性。这将导致视图根据您在xaml中设置的绑定进行更新。

答案 1 :(得分:0)

PL完全正确。 Prism鼓励没有与ADO.NET数据服务不兼容的模式。你应该知道几件事。

这是一个小样本。这有点棘手......整个事件有时会在UI线程之外触发,因此您必须使用调度程序处理它(至少在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;
          });
     }
}

当然,这里没有异常处理,但你希望得到这张照片。