2011-03-08 81 views
1

我有一个可观察的集合然后绑定到RadGridview的团队。这里没有问题。我能够填补我的网格与第一列中的球队名称。第二列将列出主教练。在我的团队收藏中,我收藏了另一个包含主教练的KeyPeople。所以即时通讯努力找出如何将第二列绑定到另一个集合。Silverlight绑定集合里面的集合

我有这个在我的视图模型

TeamResults = new ObservableCollection<Teams>(_context.Teams); 

KeyPeopleResults = new ObservableCollection<KeyPerson>(TeamResults.Select(x => x.KeyPerson).Where(g => g.RelationshipType == "Coach")); 

,但我不能我的GridView控件绑定到两个不同的数据源。 TeamResults包含我需要的一切。

回答

2

您可以为您的Team类创建一个客户端属性。

所有基于ItemsControl的控件绑定直接绑定到列表中显示的单个对象,而不是列表本身。这个概念一直延续到你的虚拟机:简单地修改你的ViewModel也不会帮助你。您需要修改对象本身以包含您在xaml中创建的绑定对象的足够信息。

由于您使用的是WCF RIA Services,因此您可以创建适合您的客户端属性。希望您将RIA服务抽象为服务器端库和客户端库。

只需进行部分团队类的客户端库,其中的DataContext生活和写类似下面的代码:

public partial Team 
{ 
    public KeyPerson HeadCoach 
    { 
     get 
     { 
      if (this.PeopleInTeam != null && this.PeopleInTeam.Any()) 
      { 
       return this.PeopleInTeam.FirstOrDefault(g => g.RelationshipType == "Coach"));  
      } 

      return null; 
     } 
    } 
} 

然后在你的绑定,您可以直接绑定到性能团队:

<data:DataGridTextColumn Binding="{Binding Name}" /> /*Team is implied as the object in each row is a Team*/ 
<data:DataGridTextColumn Binding="{Binding HeadCoach.Name}" /> 
<data:DataGridTextColumn Binding="{Binding HeadCoach.PhoneNumber}" /> 

这是一个非常常见的技术。这也是我们有权为由WCF RIA服务生成的类写入客户端代码的原因。

我已阅读您对使用单独查询加载主教练的意见。您可能希望查看与您的团队在相同的查询中下载您的KeyPeople。您可以使用服务器上的.Include语句发送关键人员。

如果这不是一个可行的解决方案,那么在您的ClientSide代码中使HeadCoach成为{get;set;}属性。此外,因为WCF RIA是一个导航系统,所以如果您对SAME DataContext进行单独查询作为第一个查询,则关键人员导航系统将已设置,从而使您的部分类的属性自动工作。

玩得开心!

+0

我开始走转换路线..但这似乎更适合我们。实际上,对Ria serivces所做的价值转换和客户端变更都有很好的教训。我们正在使用域服务中的.Include,这正是我们需要做的,并将用于我们应用的其他领域。 ...谢谢! – gevjen 2011-03-08 17:34:15

0

为什么不使用像ObservableCollection<KeyValuePair<string, string>>这样的数据结构?绑定起来会容易得多。

key可能是团队的名字,value可能是教练的名字。

+0

我喜欢这个方向,但我不仅需要显示团队名称和教练..但在该keyperson集合,持有人数据我将需要显示教练姓名和他的所有联系信息。电子邮件电话等。 – gevjen 2011-03-08 11:03:03

+0

好吧。然后它只是更复杂一点。你将需要一个ViewModel。你熟悉MVVM吗? – DHN 2011-03-08 11:10:14

+0

是的..这就是我们所使用的.. – gevjen 2011-03-08 11:14:31

1

这听起来像你需要添加HeadCoach属性到你的ViewModel。将该房产指数列入清单中的HeadCoach。

如果这不可行,请尝试在绑定中使用值转换器。像这样的东西,请原谅伪码。
<Column Text="{Binding Path=KeyPeople, Converter={StaticResource FindHeadCoachConverter}"/>