绑定到相关(详细)集合中第一个项目的属性

时间:2015-03-25 04:44:32

标签: c# wpf xaml

WPF: How to bind to only one item in a collection, not using ItemsControl since I don't want to display all of them类似,但集合与主绑定项相关。所有数据都通过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.First(我也尝试过Orders.FirstOrDefault ),但这不起作用。

查看链接的问题,我尝试了Sheridan的'[]'语法,但Orders [0] .OrderDate输出错误为:System.Windows.Data Error: 40 : BindingExpression path error: '[]' property not found on 'object' ''HashSet'1' (HashCode=37425772)'. BindingExpression:Path=Orders[0].OrderDate; DataItem='Customer_<BigLongIdentityString>' (HashCode=21972018); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')

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

有人可以告诉我如何到达相关集合中第一个项目的属性吗?

1 个答案:

答案 0 :(得分:3)

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

public Order FirstItem 
{ 
    get { return this.Orders.First(); }
} 

然后,您可以绑定到该新属性。

此外,this answer is highly relevant。这里的散列集可能不太合适。没有索引器。我一般坚持使用ObservableCollections。

此外,关于与数据绑定兼容的EF生成,请查看this MSDN article。阅读名为

的部分
  

更新数据绑定的代码生成

你可以搞乱T4模板和文章,

  

查找并替换第一次出现的“HashSet”   “的ObservableCollection”。

快乐的WPF&#39>。