有没有办法做到这一点,或者我是否必须在ViewModel上创建一个IsSelectedProperty并将其绑定到那个?
我希望能够做类似Source = {Binding RelativeAncestor ListViewItem}
的事情但是只有这个属性sourcename,如果我用x命名它们,我可以用来根据datatemplate中的项设置触发器:Name
<HierarchicalDataTemplate.Triggers>
<Trigger SourceName="" Property="IsSelected" Value="True">
<Setter TargetName="bdr" Property="Foreground" Value="White"/>
<Setter TargetName="bdr" Property="Foreground" Value="Red"/>
</Trigger>
</HierarchicalDataTemplate.Triggers>
回想起来,我意识到昨天我做了一个非常令人困惑的帖子。另外,考虑到我甚至可以解释人们对我的问题的评论,我应该提供更多详细信息。
我知道在wpf中你可以通过设置目标控件类型的样式来设置基于控件的触发器。
此外,您还拥有可触发datacontext属性的数据触发器。我希望有一种方法可以在datacontext是特定类型的对象时使用触发器或数据触发器来设置属性。
这可能吗?如果没有,我将在我的情况下接受所提供的答案,但由于这将要求我向我的viewmodel添加一个属性,检查是否有办法只检查项目类型而不是必须检查实际的财产。答案 0 :(得分:1)
我建议您在视图模型中绑定IsSelected属性,但这只是我。
我不确定你的HierarchicalDataTemplate
是多么复杂,或者某些项目是否需要更改前景,而有些则不需要;但我假设你想要更新整个TreeView中选择的项目(如果这是为了这个)。
如果是这种情况,只需将DataTrigger
添加到TreeViewItem
的样式:
<Style TargetType="TreeViewItem">
<Setter Property="IsSelected"
Value="{Binding IsSelected, Mode=TwoWay}" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="True">
<Setter Property="Foreground"
Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding IsSelected}"
Value="False">
<Setter Property="Foreground"
Value="Black" />
</DataTrigger>
</Style.Triggers>
</Style>
请注意,如果您不想,则不需要绑定IsSelected
参数,因为它位于我的代码中。