2009-11-18 2 views
0

실버 라이트 3을 사용하여 프리즘을 사용하기 시작했으나 이제는 ADO.NET DataServices와 함께 작동하도록 구현하려고합니다. Silverlight와 함께 사용해야하는 "DataServiceQuery"쿼리 형식의 경우 쿼리 후 Asyncronous 호출이 발생해야합니다. 이것은 내가 볼 수있는 것으로 프리즘 패턴을 깨뜨릴 것입니다. 프리즘 패턴에서 사용할 쿼리의 데이터 만 가져 오려면 어떤 아이디어가 필요합니까? 내가 틀렸다면 누구든지 맞춰라!프리즘이있는 ADO.NET DataServices

+0

글쎄, 문제는 내가 직접 viewmodel에서 Data를 호출하지 않는다는 것입니다. 서비스 계층에서 대신 호출하지만 실버 라이트는 서비스 계층에서 콜백을해야합니다. 점점 익숙해 져서 ... 나는 ado.net 데이터 서비스를 사용하여 관찰 할 수있는 컬렉션을 서비스 레이어에서 반환하고 싶었습니다 ... 죄송합니다. 저는 silverlight에서 약간 nOOb입니다. 한 번 소화하기에는 너무 많습니다.) – Diego

+0

이것이 당신에게 어떻게 드러났습니까? –

답변

1

서버에 대한 비동기 호출을 수행해도 "프리즘 패턴"이 손상되지 않습니다. 뷰에서 서버를 쿼리해야 할 때 viewmodel은 비동기 요청을 발생시키고 콜백을 제공합니다. 일단 콜백이 호출되면 결과를 처리하고 뷰에 노출되는 모든 속성을 업데이트합니다. 이렇게하면 xaml에 설정 한 바인딩에 따라보기가 업데이트됩니다.

0

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; 
      }); 
    } 
} 

도 예외 없다 여기에서 다루지 만 잘하면 그림을 얻는다.

+0

글쎄, beginInvoke 메서드가 누락되었습니다 및 momment 내가 왜 알아내는 해요. 답장을 보내 주셔서 감사합니다 – Diego

+0

Dispatcher에서? 그건별로 의미가 없습니다. –

+0

오 죄송합니다 ... CurrentDispatcher를 포함하는 것을 잊었습니다. 코드를 수정하고 있습니다. –