与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文章,我尝试用括号(根据附加属性)和使用斜杠(当源是集合时)将表达式包装起来。不出意外,这些也失败了。
有人可以告诉我如何到达相关集合中第一个项目的属性吗?
答案 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>。