2013-07-09 64 views
1

如何从嵌套数据模板(项目数据模板中的控件的数据模板)中绑定到ItemsControl中的Item的DataContext?我不能使用TemplatedParent,因为它是双模板的。 而我不知道如何使用FindAncestor,AncestorType,因为我不知道每个项目的类型是什么。绑定到ItemsControl中的Item的DataContext

有什么想法?

回答

3

如果我正确地读这篇文章,您有:

- ItemsControl 
    |- ItemTemplate     Item.DataContext<--| 
    |- Button           | 
     |- ContentTemplate <-- Bind something in this to| 

如果是这样的话,你要寻找的是ContentPresenter。这是ItemsControl生成的容器类型。问题是你将有多个ContentPresenter祖先。您可以使用RelativeSourceAncestorLevel属性来处理此问题。

所以,在我的例子中,ButtonDataTemplate可以通过访问该行的DataContext

<DataTemplate> 
    <TextBlock Text="{Binding DataContext.Name, RelativeSource={RelativeSource AncestorType={x:Type ContentPresenter}, AncestorLevel=2}}" /> 
</DataTemplate> 
+0

ContentPresenter!这就是我一直在寻找的。谢谢! –

+0

终于在搜索3小时后找到它!这应该有更多的选票可见顶部。谢谢。 – Val