从ItemsControl绑定到父DataTemplate属性

本文关键字:DataTemplate 属性 ItemsControl 绑定 | 更新日期: 2024-09-17 00:16:31

假设我有这个ViewModel和xaml:

class MyViewModel
{
    public MyStringValue {get;set;} = "HelloWorld"
    public IList<CustomObject> ChildViewModels{get;set;}
}
<DataTemplate DataType="{x:Type local:MyViewModel}">
    <ItemsControl ItemsSource="{Binding ChildViewModels}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <TextBlock Text="{Binding Path=MyStringValue,
                        RelativeSource={RelativeSource Mode=FindAncestor,
                        AncestorType={x:Type local:MyViewModel}}}"/>
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</DataTemplate>

我一直收到以下错误消息:"找不到引用为"RelativeSource FindAncestor"的绑定的源…"所以基本上,我正在尝试绑定ItemsControl的parents属性容器,但似乎我做不到。

从ItemsControl绑定到父DataTemplate属性

RelativeSource AncestorType是属于更高级别的视觉树(此处为ItemsControl)。

由于MyStringValue不是ItemsControl的属性,因此也应该将Binding Path更改为点对视图模型(DataContext):

{Binding Path=DataContext.MyStringValue, 
         RelativeSource={RelativeSource AncestorType=ItemsControl}}"