【问题标题】:data binding on properties confusion属性混淆的数据绑定
【发布时间】:2010-06-13 21:34:47
【问题描述】:
我有一个 wpf tabitem,其数据上下文设置为我的对象“产品”。此表单上的所有控件都从“产品”对象获取数据。我有一个列表视图,其 ItemsSource 属性设置为我的对象“Product.DetailsList”中的列表。 Listview 列绑定到“Product.DetailsList”中的对象属性
到目前为止一切正常。现在我需要将列表视图中的一些列绑定到我的数据上下文对象中的属性,即“产品”。谁能告诉我如何实现这一目标?
【问题讨论】:
标签:
wpf
data-binding
binding
【解决方案1】:
我认为控件之间的层次结构对我来说并不完全清楚。 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
【解决方案2】:
如果我正确理解了您的问题,您会问如何绑定到集合中当前项目的某些属性。它是通过在绑定路径中使用斜杠(“/”)来完成的。
这是来自 MSDN 的示例:
<Button Content="{Binding }" />
<Button Content="{Binding Path=/}" />
<Button Content="{Binding Path=/Description}" />
在上面的示例中,第一行绑定到集合,第二行绑定到集合的当前项,第三行绑定到集合中当前项的Description 属性。
示例来自 MSDN 文章:Binding to Collections - 查找 Current Item Pointers。