从ItemsControl绑定到父DataTemplate属性

时间:2016-04-16 18:21:15

标签: c# wpf xaml mvvm binding

我在整个stackoverflow中查看并尝试了所有给定的解决方案,但仍然无法使其工作。

说我有这个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属性容器,看起来我不能。

任何帮助都将受到高度赞赏!

谢谢!

1 个答案:

答案 0 :(得分:2)

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

由于MyStringValue不是ItemsControl的属性,因此您应该更改Binding Path以指向视图模型(DataContext)

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