WPF数据绑定 - 从父级获取值

时间:2012-09-18 23:08:56

标签: .net wpf xaml c#-4.0 binding

我有以下.xaml:

<TreeView ItemsSource="{Binding EntityInstanceGroupings}">
    <TreeView.ItemTemplate>
        <DataTemplate>
            <TreeViewItem ItemsSource="{Binding EntityInstances}">
                <TreeViewItem.HeaderTemplate>
                    <DataTemplate>
                        <DockPanel LastChildFill="True">
                            <TextBlock Text="{Binding ...}" />
                            <Button Content="Add" DockPanel.Dock="Right" VerticalContentAlignment="Top">
                                ...
                            </Button>
                        </DockPanel>
                    </DataTemplate>
                </TreeViewItem.HeaderTemplate>
                <TreeViewItem.ItemTemplate>
                    ...
                </TreeViewItem.ItemTemplate>
            </TreeViewItem>
        </DataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

在这一行:

<TextBlock Text="{Binding ...}" />

我正在尝试绑定到EntityInstanceGroupings视图模型中的属性“GroupName”。我无法想象这样做(如果可能的话)。任何帮助将不胜感激:)

3 个答案:

答案 0 :(得分:2)

您应该可以使用RelativeSource实现此目的。

<TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=TreeViewItem},
    Path=DataContext.GroupName}" />

答案 1 :(得分:0)

如果我可以遵循您的逻辑,那么您的TreeView会获得 EntityInstance组的列表。 TreeView的rootNodes是这些组。在TreeView.ItemTemplate中,您要显示每个组的名称。

在这种情况下,DataContextTreeViewItem的{​​{1}}也应该是 EntityInstances 组。

这意味着您只需将TextBox直接设置为道具:

Binding

答案 2 :(得分:0)

虽然我想要做的事情已经实现,但我确实找到了一个更好的解决方案来实现我想要的目标。

<UserControl.Resources>
    <HierarchicalDataTemplate x:Key="entityTemplate">
        <TextBlock Text="{Binding LayoutName}" />
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="groupingTemplate" ItemsSource="{Binding EntityInstances}" ItemTemplate="{StaticResource entityTemplate}">
        <DockPanel LastChildFill="True">
            <TextBlock Text="{Binding Name}" FontWeight="Bold"/>
            <Button Content="Add" DockPanel.Dock="Right" VerticalContentAlignment="Top">
                ...
            </Button>
        </DockPanel>
    </HierarchicalDataTemplate>    
</UserControl.Resources>

<!-- Instantiate the TreeView control -->
<TreeView ItemsSource="{Binding EntityInstanceGroupings}" ItemTemplate="{StaticResource groupingTemplate}" />