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

类似于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错误:40:BindingExpression路径错误:在[‘]中找不到'[]’属性object”HashSet’1′(HashCode = 37425772)’. BindingExpression:Path = Orders [0] .OrderDate; DataItem =’Customer_< BigLongIdentityString>‘ (HashCode = 21972018);目标元素是’TextBlock'(Name =”);目标属性是“文本”(类型为“字符串”).

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

有人可以告诉我如何获得相关收藏中的第一件商品的财产吗?

解决方法:

如果可能的话,您总是可以向模型添加一个新属性以公开第一项:

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

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

另外,值为this answer is highly relevant.在这里,哈希集可能不太适合.没有索引器.我通常坚持使用ObservableCollections.

另外,关于与数据绑定兼容的EF生成,请查看this MSDN article.

Updating code generation for data binding

您可以弄乱T4模板,并按照文章进行操作,

Find and replace the first occurrence of “HashSet” with
“ObservableCollection”.

WPF祝您一切顺利.

上一篇:CodeGo.net>如何正确地通知数据绑定控件复合属性具有新值?


下一篇:C#-与XAML视图模型接口