2011-12-25 49 views
0

我开始使用Silverlight的WCF RIA域服务,我有一个问题。如何直接从Silverlight的WCF RIA域服务获取对象

到目前为止,我能填补一个DataGrid从我的WCF数据的到来。这没关系。

但我想简单地得到的名单,让我们说,我的所有用户。通常用DataGrid我会这样做:

CortexDomainContext oContext = new CortexDomainContext(); 

this.dataGrid1.ItemsSource = oContext.Users; 
oContext.Load(oContext.GetUsersQuery()); 

但是,如果我只想得到结果列表,我该怎么做呢?!

我想:

List<User> oUsers = oContext.Users.ToList(); 
oContext.Load(oContext.GetUsersQuery()); 

但它并没有奏效。

一切工作正常的,但这个问题仍停留在我的脑海里......

非常感谢!

+0

“但它没有奏效。” - 更具体一些.... – 2011-12-25 06:21:28

+0

它没有填补我的名单与任何用户。这就是为什么它没有奏效。该清单保持空白。 – TomShreds 2011-12-25 06:27:15

+0

并且当您在调试器中逐步完成时,列表是否包含任何内容? – 2011-12-25 06:29:51

回答

1

DomainContext.Load是异步的Silverlight中的任何其他网络通话,所以你得到的结果要么通过回调,或通过事件处理程序。例子:

通过回调

,通过事件处理看http://msdn.microsoft.com/en-us/library/ff422945(v=vs.91).aspx

oContext.Load(oContext.GetUsersQuery(), operation => 
    { 
    var users = operation.Entities; // here you are 
    }, null); 

,看到http://msdn.microsoft.com/en-us/library/ff422589(v=VS.91).aspx

var operation = oContext.Load(oContext.GetUsersQuery()); 
operation.Completed += (s, e) => 
    { 
    var users = operation.Entities; // your users are here 
    }; 

我建议第一种方式。

DataGrid没有它,因为它绑定到实现INotifyCollectionChanged的实体集,即当实体添加到实体集或从实体集中移除时通知订户。的DataGrid(事实上,ItemsControl)订阅该事件INotifyCollectionChanged.CollectionChanged跟踪EntitySet的修改。

+0

这完全是我在找的东西!非常感谢! – TomShreds 2011-12-25 15:32:22