Silverlight将集合与内部集合绑定

Silverlight将集合与内部集合绑定,silverlight,xaml,binding,wcf-ria-services,Silverlight,Xaml,Binding,Wcf Ria Services,我有一个可观察到的团队集合,然后绑定到RadGridview。这里没有问题。我可以用第一列中的团队名称填充我的表格。第二栏将列出主教练。在我的团队集合中,我有另一个包含主教练的关键人物集合。因此,我正在努力找出如何将第二列绑定到另一个集合 我的视图模型中有这个 TeamResults = new ObservableCollection<Teams>(_context.Teams); KeyPeopleResults = new ObservableCollection<Ke

我有一个可观察到的团队集合,然后绑定到RadGridview。这里没有问题。我可以用第一列中的团队名称填充我的表格。第二栏将列出主教练。在我的团队集合中,我有另一个包含主教练的关键人物集合。因此,我正在努力找出如何将第二列绑定到另一个集合

我的视图模型中有这个

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

KeyPeopleResults = new ObservableCollection<KeyPerson>(TeamResults.Select(x => x.KeyPerson).Where(g => g.RelationshipType == "Coach"));
TeamResults=新的ObservableCollection(_context.Teams);
KeyPeopleResults=新的ObservableCollection(TeamResults.Select(x=>x.KeyPerson)。其中(g=>g.RelationshipType==“Coach”);

但我无法将gridview绑定到两个不同的数据源。TeamResults包含了我需要的一切。

为什么不使用像
ObservableCollection这样的数据结构呢?这样就容易多了


可以是团队的名称,
可以是教练的名称。

听起来您需要在ViewModel中添加HeadCoach属性。将该属性索引到列表中的HeadCoach

如果不可能,请尝试在绑定中使用值转换器。诸如此类,请原谅psuedo代码。

您可以为团队类创建客户端属性

基于ItemsControl的控件的所有绑定都直接绑定到列表中显示的单个对象,而不是列表本身。同样的概念仍然存在于您的VM中:简单地修改ViewModel对您也没有帮助。您需要修改对象本身,以包含足够的信息,用于在xaml中创建的绑定对象

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

只需在DataContext所在的客户端库中创建部分Team类,并编写类似于以下内容的代码:

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服务生成的类编写客户端代码的原因

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

如果这不是一个可行的解决方案,那么在客户端代码中将HeadCoach设置为
{get;set;}
属性。此外,由于WCF RIA是一个导航系统,如果您在与第一个查询相同的DataContext上进行单独的查询,那么关键人物导航系统将已经设置好,从而使您的分部类属性自动工作


玩得开心

我喜欢这个方向,但我不仅要显示球队名称和教练……而且在保存个人数据的keyperson集合中,我需要显示教练姓名和他的所有联系信息。电子邮件、电话等。好的。那就更复杂了。您将需要一个ViewModel。你熟悉MVVM吗?那么,为这个
视图设计一个
ViewModel
,并将其绑定到网格中。在我的ViewModel中,我目前为这个视图设计了一个视图模型。。我有一大堆RIA服务调用,它们让我得到了最初问题中的两个可观察的集合。我正在对团队进行加载,并在域服务中进行包含,该服务在加载调用中返回keyPeople。因此,可观察到的团队集合也包括关键人员。在关键人员实体中有一个人员列表,其中一个是教练。我没有RIA服务的经验。但你的方法似乎很奇怪。我认为更好的方法是检索具有已解决关系的数据(例如,团队和教练或教练及其联系数据)。它将最小化客户端上的负载,因为服务器将完成所有复杂的工作。这也会使前端的实现更加容易。我开始采用转换器的方式。但这似乎更适合我们。实际上,这是一个关于价值转换器和Ria服务客户端更改的很好的教训。我们正在使用。包含在域服务中,这正是我们需要做的,并将用于我们应用程序的其他领域…谢谢!