我有一个带有ItemsControl的绑定树视图,可以在运行时动态创建树视图项。但是,要做到这一点,我将ItemsControl ItemsSource绑定到不同于树视图绑定的集合。这是有效的,但问题是绑定ItemsContol中的文本框,应该显示的内容实际上是SubOrganLocations
的成员,但我似乎无法让绑定正常工作。无论我做什么,WPF都希望绑定到ItemsControl ItemsSource ProjectOrganLocation.LesionTypes
的属性而不是SubOrganLocations
。下面是树的XAML
<TreeView ItemsSource="{Binding GlobalOrganTree}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding SubOrganLocations}">
<StackPanel Orientation="Horizontal">
<ItemsControl x:Name="ItemsControlGrid" ItemsSource="{Binding Path=ProjectOrganLocation.LesionTypes, Source={StaticResource Locator}}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding SubOrganLocations, Path=OrganLocation.Labels}"
Width="75"
TextAlignment="Center"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
如何将文本框绑定到SubOrganLocations
属性而不是ProjectOrganLocation.LesionTypes
属性?
答案 0 :(得分:2)
当您需要绑定到树中较高的DataContext时,RelativeSource很常见:
<TextBox Text="{Binding Path=DataContext.Labels, RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}}}" />
这绑定到TreeViewItems的DataContext(一个Organ)并从中获取标签。