.net TreeView-动态更改textblock的文本绑定(项目模板的一部分)
我有一个包含TreeView控件的用户控件。 我想根据TreeViewSerControl类中名为.net TreeView-动态更改textblock的文本绑定(项目模板的一部分),.net,wpf,xaml,wpf-controls,.net,Wpf,Xaml,Wpf Controls,我有一个包含TreeView控件的用户控件。 我想根据TreeViewSerControl类中名为NodeDisplayProperty的依赖属性的值,设置TreeView的ItemTemplate中使用的TextBlock的Text属性的**绑定** 我尝试了与下面所示类似的方法(但是为NodeDisplayProperty设置了正确的数据上下文),但是它不起作用,因为TextBlock的Text属性拒绝“双重绑定” TreeView的属性DisplayMemberPath也无法设置,因为我正
NodeDisplayProperty
的依赖属性的值,设置TreeView
的ItemTemplate
中使用的TextBlock
的Text
属性的**绑定**
我尝试了与下面所示类似的方法(但是为NodeDisplayProperty
设置了正确的数据上下文),但是它不起作用,因为TextBlock
的Text
属性拒绝“双重绑定”
TreeView
的属性DisplayMemberPath
也无法设置,因为我正在使用项目模板
有没有不涉及编写新绑定类的建议?
理想情况下,我想要一个XAML解决方案,但是如果您在代码隐藏中这样做,那么如何访问
XAML定义项模板中代码块的绑定
编辑:树中显示的项目来自模型,因此它们在UI元素上不可见
谢谢
<UserControl x:Class="TreeViewUserControl">
<Grid>
<TreeView ItemsSource="{Binding Path=Hierarchy}" HorizontalAlignment="Stretch" Name="treeHierarchy" SelectedItemChanged="treeHierarchySelectedItemChanged" >
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Nodes}">
<!-- Here --- --> <TextBlock Text="{Binding Path={Binding NodeDisplayProperty}}" VerticalAlignment="Center" FontSize="13" >
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Command="userControls:Commands.RemoveNode">
</MenuItem>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Style.Triggers>
<!-- ... -->
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
</Grid>
</UserControl>
为什么不直接公开应该显示的内容,而不是返回包含该内容的属性的名称?绑定的属性的名称取决于用户通过UI选择的选项。正如我所说,您可以拥有一个直接返回值的属性。如何实现这一点取决于用户选择的级别。例如,如果它位于整个树的顶层,则每个项目都需要能够查找它,然后返回相关值。显示的项目属于模型类,因此它们在UI类型上没有可见性。问题更新:)这没关系,我不是说UI,而是说代表整个树和项目的类。如果没有树的类,只有无关紧要的节点,那么节点只需要知道用户选择了什么,如果不是节点本身,这些信息应该在某些模型中。