C# 绑定到相关(详细信息)集合中第一项的属性

C# 绑定到相关(详细信息)集合中第一项的属性,c#,wpf,xaml,C#,Wpf,Xaml,与类似,但集合与主绑定项相关。所有数据都是通过EntityFramework输入的。与链接问题一样,xaml最好地解释了这一点: <StackPanel Grid.Row="1" Orientation="Horizontal" DataContext="{Binding CurrentCustomer}"> <StackPanel Orientation="Horizontal"> <TextBlock Text="Total Orders:" /&g

与类似,但集合与主绑定项相关。所有数据都是通过EntityFramework输入的。与链接问题一样,xaml最好地解释了这一点:

<StackPanel Grid.Row="1" Orientation="Horizontal" DataContext="{Binding CurrentCustomer}">
  <StackPanel Orientation="Horizontal">
    <TextBlock Text="Total Orders:" />
    <TextBlock Text="{Binding Orders.Count}" />
  </StackPanel >

  <StackPanel Orientation="Horizontal">
    <TextBlock Text="First Order:" />
    <TextBlock Text="{Binding Orders.First.OrderDate}" />
  </StackPanel >
</StackPanel>

正如您所看到的,我猜因为我可以使用'orders.count'获得相关订单的计数,所以我尝试使用相同的linq语法来尝试检索订单。首先(我还尝试了orders.FirstOrDefault),但这不起作用

查看链接的问题,我尝试了's'[]'语法,但Orders[0]。OrderDate的输出错误为:
System.Windows.Data错误:40:BindingExpression路径错误:'object''HashSet'1'(HashCode=37425772)上未找到'[]'属性。BindingExpression:Path=Orders[0]。OrderDate;DataItem='Customer'(HashCode=21972018);目标元素为“TextBlock”(名称=“”);目标属性为“Text”(类型为“String”)

查看他链接到的msdn文章,我尝试将表达式包装在括号中(根据附加属性)并使用斜杠(当源是集合时)。不出所料,这些措施也失败了


有人能告诉我如何获得相关集合中第一个项目的属性吗?

如果可能,您可以始终向模型中添加一个新属性以公开第一个项目:

public Order FirstItem 
{ 
    get { return this.Orders.First(); }
} 
然后,您可以绑定到该新属性

也。在这里,哈希集可能不太合适。没有索引器。我通常坚持观察收集

另外,关于与数据绑定兼容的EF生成,请参阅。阅读名为

更新数据绑定的代码生成

你可以搞乱T4模板,根据文章

查找第一个出现的“HashSet”,并将其替换为 “可观测收集”


快乐WPF'ing。

First是一个扩展方法,即,
Orders.First().OrderDate
?@StuartLC好主意,但没有。相同的错误消息:
BindingExpression路径错误:'object'上找不到First()'属性。
@LynnCrumbling我没有看到那个。我不知道如何将HashSet更改为集合,因为这都是EF魔法(我通常也坚持使用ObservaleCollection),但这个答案加上您的第一条注释看起来就像我问题的答案:在VM中创建一个属性,从HashSet中检索最早日期的顺序。你想回答你的评论,我接受吗?@mcalex全部完成;看看我的编辑,它谈到了EF代码生成的T4模板。我记得不久前读过(现在你提醒了我)。我认为在生成模型时,EF向导应该提出一个建议,询问您是否需要WPF可绑定模型来处理这些细节。谢谢,问题解决了:-)