我的WPF窗口上有一个TreeView控件。我只从窗口给出相关的XAML。
<Window.Resources>
<HierarchicalDataTemplate x:Key="HierarchicalTemplate" ItemsSource="{Binding SubOrgUnitItems}">
<StackPanel Orientation="Horizontal">
<Image Height="16" Source="{Binding ImagePath}" Stretch="Fill" Width="16"/>
<TextBlock Text="{Binding OrgUnitName}" Name="treeText" />
</StackPanel>
</HierarchicalDataTemplate>
</Window.Resources>
<TreeView Margin="10,35,10,10" BorderThickness="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ScrollViewer.VerticalScrollBarVisibility="Auto"
IsTabStop="True" Name="orgTreeView" ItemsSource="{Binding}" ItemTemplate="{DynamicResource HierarchicalTemplate}" TabIndex="700" SelectedItemChanged="orgTreeView_SelectedItemChanged" />
当组织集合绑定到DataContext
的{{1}}时,项目会以TreeView
的值显示为每个节点的文本。
现在,在运行时,我想在每个节点上看到一些其他属性的值作为文本。例如OrgUnitName
代替OrgUnitCode
。两者都是在与树视图关联的视图模型类中声明的属性。
如何在运行时以编程方式执行此操作?
答案 0 :(得分:0)
我已经实现了我想做的事情,但不幸的是通过一些努力。以下事情对我有用,但可能不是问题的正确答案。
我又添加了一个HirerachicalDataTemplate
和TreeView
。新模板使用OrgUnitCode
属性。新树视图使用新模板。
<HierarchicalDataTemplate x:Key="HierarchicalTemplateUsingCode" ItemsSource="{Binding SubOrgUnitItems}">
<StackPanel Orientation="Horizontal">
<Image Height="16" Source="{Binding ImagePath}" Stretch="Fill" Width="16"/>
<TextBlock Text="{Binding OrgUnitCode}" Name="treeText" />
</StackPanel>
</HierarchicalDataTemplate>
<TreeView Margin="10,35,10,10" BorderThickness="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ScrollViewer.VerticalScrollBarVisibility="Auto"
IsTabStop="True" Name="orgTreeViewCode" ItemsSource="{Binding}" ItemTemplate="{DynamicResource HierarchicalTemplateUsingCode}" TabIndex="700" SelectedItemChanged="orgTreeViewCode_SelectedItemChanged" Visibility="Hidden"/>
在运行时,当我想在节点上看到OrgUnitCode
属性值作为文本时,我只是让新树可见并隐藏第一个(提到的问题)。因此,使树视图可见/不可见有助于我实现我想要做的事情。
答案 1 :(得分:0)
您应该使用HierarchicalDataTemplateSelector
。
定义两个不同的HierarchicalDataTemplate
(正如您所做的那样)。
从DataTemplateSelector
继承自定义选择器类,覆盖其SelectTemplate方法并将选择的逻辑放在那里。此方法将在每种情况下返回正确的模板。
在xaml文件中创建资源(自定义选择器类)。
将TreeView
s ItemTemplateSelector
设置为静态选择器资源。
请在此处查看一个简单示例:Link