是的,乍一看,这似乎很基本。但问题在于:我使用MVVM和分层数据绑定来填充树。WPF/Silverlight:扩展根树节点
我很难做的是获得第一个节点扩展。原因是:
我没有直接引用树,因为我在视图模型代码中。 (MVVM正在推动我的坚果)。
我已经想出了如何通过在我的视图的xaml中使用样式来扩展所有节点,但我只想扩展现在的第一个节点,我无法弄清楚。
任何想法?
是的,乍一看,这似乎很基本。但问题在于:我使用MVVM和分层数据绑定来填充树。WPF/Silverlight:扩展根树节点
我很难做的是获得第一个节点扩展。原因是:
我没有直接引用树,因为我在视图模型代码中。 (MVVM正在推动我的坚果)。
我已经想出了如何通过在我的视图的xaml中使用样式来扩展所有节点,但我只想扩展现在的第一个节点,我无法弄清楚。
任何想法?
Josh Smith在CodeProject上有一篇文章,它解释了如何在ViewModels中使用TreeView。 Simplifying the WPF TreeView by Using the ViewModel Pattern
该示例的关键部分显示了如何绑定ViewModel中的IsExpanded和IsSelected属性。
因此,如果所有ViewModel都具有IsExpanded和IsSelected属性,您将能够通过将其ViewModel的IsExpanded属性设置为true来展开特定节点。
<TreeView.ItemContainerStyle>
<!--
This Style binds a TreeViewItem to a ViewModel.
-->
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="FontWeight" Value="Normal" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
还有,如果你正在使用Silverlight,除了约什 - 史密斯的文章,你需要看看SetterValueBindingHelper在大卫Anson的博客中解释这里的差异。
我已经能够实现这一点的最简单方法是使用样式(您可以将所有内容保留在XAML中,并且不需要任何特殊的MVVM属性)。您可以在实际的TreeView元素上设置顶级的ItemContainerStyle,以设置根TreeViewItem的样式并将其展示为展开。然后在您的HierarchicalDataTemplate元素上设置一个ItemContainerStyle作为其他级别上所有节点的默认TreeViewItem样式。 BasedOn属性可以很容易地继承整个TreeViewItem样式,并且只更改IsExpanded属性。
主树形XAML:
<TreeView x:Name="Tree" ItemContainerStyle="{StaticResource RootTreeViewItemStyle}">
<TreeView.ItemTemplate>
<common:HierarchicalDataTemplate ItemContainerStyle="{StaticResource TreeViewItemStyle}">
<!-- rest of your template... -->
</common:HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
你的基地树型视图风格:
<Style x:Key="TreeViewItemStyle" TargetType="TreeViewItem">
<!-- your normal or default TreeViewStyle... -->
</Style>
根树型视图风格:
<Style x:Key="RootTreeViewItemStyle" TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItemStyle}">
<Setter Property="IsExpanded" Value="True"/>
</Style>