我有一个wpf tabitem,其数据上下文设置为我的对象'Product'。此表单上的所有控件都从“Product”对象获取其数据。我有一个listview,其ItemsSource属性设置为我的对象'Product.DetailsList'中的列表。 Listview列绑定到'Product.DetailsList'
中的对象属性直到这里一切正常。现在我需要将listview中的一些列绑定到我的datacontext对象中的属性,即“Product”。有人能告诉我怎样才能实现这个目标?
答案 0 :(得分:0)
我认为对我来说并不完全清楚控件之间的层次结构如何。 DataContext以这种方式工作:从顶级控件继承到它们的子级。在这种情况下,如果WPF TabItem是ListView的父控件,则ListView将具有与TabItem相同的DataContext。
另外,假设我做对了,你可以这样做:
<TabItem>
<ListView>
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type TabItem}}, Path=DataContext.MyPropInProductObject}">
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</TabItem>
其中有趣的部分是设置为FindAncestor的相对源,并且因为您知道DataContext设置为Product对象,所以您可以在那里询问您想要的属性。
HTH
答案 1 :(得分:0)
如果我正确理解了你的问题,你就会问如何绑定到集合中当前项目的某些属性。它是通过在绑定路径中使用斜杠(“/”)来完成的。
以下是MSDN的示例:
<Button Content="{Binding }" />
<Button Content="{Binding Path=/}" />
<Button Content="{Binding Path=/Description}" />
在上面的示例中,第一行绑定到集合,第二行绑定到当前集合项,第三行绑定到集合中当前项的Description
属性。
示例来自MSDN文章:Binding to Collections - 查找当前项目指针。