我开始在silverlight 3中使用prism,但是,我们正在尝试实现它以使用ADO.NET DataServices。与Silverlight一起使用所需的“DataServiceQuery”查询类型要求在查询后触发Asyncronous调用。这将打破我所能看到的棱镜模式。 任何想法只获取在Prism模式中使用的查询数据?如果我错了,请纠正我!
答案 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;
});
}
}
当然,这里没有异常处理,但你希望得到这张照片。