Silverlight不会从我的WCF RIA服务中获取数据
问题描述:
我刚刚通过在Channel9上发布的实验室学习了Silverlight。当我尝试探索一下时,我发现我的查询不像我认为的那样工作。Silverlight不会从我的WCF RIA服务中获取数据
要重新创建我已经完成的工作,需要创建一个新的Silverlight Business应用程序,创建一个指向Adventureworks LT db的数据实体,并为这些实体(包括编辑)生成Web服务。
然后,我简单地将RichTextbox吸入到Home.xaml和Home.xaml.cs中,我首先将此代码添加到OnNavigatedTo,以及何时对构造函数不起作用。
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);
当我运行的页面我从来没有看到loadOp.Entities包含一个价值,我只看到我所期望的查询,通过线路去我所有的代码已被执行之后。
我觉得我错过了一些基本的东西,如果我能找到某人向我解释它,这将会更有意义。
感谢, 埃里克
答
问题是你如何加载数据有关。实际的加载操作是异步的,因为所有的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
方法的实际签名,因此您可能需要修改我的lambda以使其正常工作。
你在说什么是有道理的,我需要把它当作一个AJAX调用。当我今晚回家时,我会尝试。 – 2010-07-06 18:24:24