2010-07-06 1 views
2

방금 ​​Channel9에 게시 된 실험실을 거쳐 Silverlight 학습을 시작했습니다. 내가 조금 탐험을 시도했을 때, 나는 그들이 생각한대로 내 쿼리가 작동하지 않는다는 것을 발견했다.Silverlight가 내 WCF RIA 서비스에서 데이터를 가져 오지 않았습니다.

새 Silverlight 비즈니스 응용 프로그램을 만들려면 Adventureworks LT db를 가리키는 데이터 엔터티를 만들고 해당 엔터티 (편집 포함)에 대한 웹 서비스를 생성해야합니다.

다음은 단순히 RichTextbox를 Home.xaml 및 Home.xaml.cs에 마약을 적용합니다.이 코드를 OnNavigatedTo에 먼저 추가했으며이 코드가 생성자에서 작동하지 않을 때 추가했습니다. 내가 loadOp.Entities이 값을 포함하고 난 단지 내가 기대 쿼리를 참조 볼 수 없을 페이지를 실행하면 내 모든 코드가 실행 된 후

AdventureWorksDomainContext ctx = new AdventureWorksDomainContext(); 

    EntityQuery<Product> query = 
     from p in ctx.GetProductsQuery() 
     select p; 
    LoadOperation<Product> loadOp = ctx.Load(query); 

    var paragraph = new Paragraph(); 
    foreach (var product in loadOp.Entities) 
    { 
     paragraph.Inlines.Add(new Run { Text = product.Name }); 
    } 

    richTextBox1.Blocks.Add(paragraph); 

, 회선을 통해 이동합니다.

나는 근본적인 것을 놓치고있는 것처럼 느껴지고, 누군가 나에게 설명해 줄 수 있다면 더 의미가 있습니다. 당신이 데이터를로드하는 방법을

덕분에, 에릭

답변

2

문제는 관련이 있습니다. 실제로드 작업은 모든 Silverlight 네트워크 호출과 마찬가지로 비동기 적입니다. 너는 ctx.Load(query)을 호출하고 엔티티에 즉시 단락을 설정하고있다. Load이 완료되면 콜백을 사용해야합니다. 직접 바인딩 단지 그들을 반복되는에

AdventureWorksDomainContext ctx = new AdventureWorksDomainContext(); 

EntityQuery<Product> query = 
    from p in ctx.GetProductsQuery() 
    select p; 
LoadOperation<Product> loadOp = ctx.Load(query,() => 
{ 
    var paragraph = new Paragraph(); 
    foreach (var product in loadOp.Entities) 
    { 
     paragraph.Inlines.Add(new Run { Text = product.Name }); 
    } 

    richTextBox1.Blocks.Add(paragraph); 
}); 

당신이 엔티티를 사용하지 않기 때문에 이런 식으로 뭔가가, 당신은 그들이로드 될 때까지 기다릴 확인해야합니다. Load 메서드의 실제 서명을 기억할 수 없으므로 작동하도록 내 람다를 수정해야 할 수도 있습니다.

+0

당신이 말하는 것은 말이되고 AJAX 호출처럼 처리해야합니다. 나는 오늘 밤 집에 올 때마다 노력할 것이다. –