您可以为您的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进行单独查询作为第一个查询,则关键人员导航系统将已设置,从而使您的部分类的属性自动工作。
玩得开心!
我开始走转换路线..但这似乎更适合我们。实际上,对Ria serivces所做的价值转换和客户端变更都有很好的教训。我们正在使用域服务中的.Include,这正是我们需要做的,并将用于我们应用的其他领域。 ...谢谢! – gevjen 2011-03-08 17:34:15