数据绑定属性混淆

时间:2010-06-13 21:34:48

标签: wpf data-binding binding

我有一个wpf tabitem,其数据上下文设置为我的对象'Product'。此表单上的所有控件都从“Product”对象获取其数据。我有一个listview,其ItemsSource属性设置为我的对象'Product.DetailsList'中的列表。 Listview列绑定到'Product.DetailsList'

中的对象属性

直到这里一切正常。现在我需要将listview中的一些列绑定到我的datacontext对象中的属性,即“Product”。有人能告诉我怎样才能实现这个目标?

2 个答案:

答案 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 - 查找当前项目指针