실버 라이트 3을 사용하여 프리즘을 사용하기 시작했으나 이제는 ADO.NET DataServices와 함께 작동하도록 구현하려고합니다. Silverlight와 함께 사용해야하는 "DataServiceQuery"쿼리 형식의 경우 쿼리 후 Asyncronous 호출이 발생해야합니다. 이것은 내가 볼 수있는 것으로 프리즘 패턴을 깨뜨릴 것입니다. 프리즘 패턴에서 사용할 쿼리의 데이터 만 가져 오려면 어떤 아이디어가 필요합니까? 내가 틀렸다면 누구든지 맞춰라!프리즘이있는 ADO.NET DataServices
답변
서버에 대한 비동기 호출을 수행해도 "프리즘 패턴"이 손상되지 않습니다. 뷰에서 서버를 쿼리해야 할 때 viewmodel은 비동기 요청을 발생시키고 콜백을 제공합니다. 일단 콜백이 호출되면 결과를 처리하고 뷰에 노출되는 모든 속성을 업데이트합니다. 이렇게하면 xaml에 설정 한 바인딩에 따라보기가 업데이트됩니다.
PL이 정확합니다. Prism이 권장하는 패턴은 ADO.NET Data Services와 호환되지 않습니다. 당신이 알아야 할 몇 가지 점이 있습니다.
다음은 작은 샘플입니다. 당신이 디스패처로 처리 할 수 있도록 그것은 ... 전체 이벤트가 때때로, 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;
});
}
}
도 예외 없다 여기에서 다루지 만 잘하면 그림을 얻는다.
글쎄, beginInvoke 메서드가 누락되었습니다 및 momment 내가 왜 알아내는 해요. 답장을 보내 주셔서 감사합니다 – Diego
Dispatcher에서? 그건별로 의미가 없습니다. –
오 죄송합니다 ... CurrentDispatcher를 포함하는 것을 잊었습니다. 코드를 수정하고 있습니다. –
글쎄, 문제는 내가 직접 viewmodel에서 Data를 호출하지 않는다는 것입니다. 서비스 계층에서 대신 호출하지만 실버 라이트는 서비스 계층에서 콜백을해야합니다. 점점 익숙해 져서 ... 나는 ado.net 데이터 서비스를 사용하여 관찰 할 수있는 컬렉션을 서비스 레이어에서 반환하고 싶었습니다 ... 죄송합니다. 저는 silverlight에서 약간 nOOb입니다. 한 번 소화하기에는 너무 많습니다.) – Diego
이것이 당신에게 어떻게 드러났습니까? –