绑定到 ItemContainerStyle 内的 ViewModel 属性 以便在触发器中使用
Bind to ViewModel property inside ItemContainerStyle for use in triggers
我有一个 TreeView,其 DataContext 是我的 ViewModel。 ViewModel 有一个 属性 MyProp
。在 TreeView 中,我定义了一个带有 DataTrigger 的 ItemContainerStyle:
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Style.Triggers>
<DataTrigger Binding={MyProp} Value="...">
<!-- does not work because DataContext is the Item, not the ViewModel -->
<Setter Property="Focusable" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
但是由于 ItemContainerStyle 有一个 Item 作为它的 DataContext 而不是 ViewModel,所以 DataTrigger 中的 Binding 不起作用。那么如何告诉 Binding 我想绑定到 ViewModel.MyProp
?似乎我无法在 Styles 和 Triggers 中设置 DataContext
,那我还能怎么做呢?
你有没有尝试获取你的相对来源:
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.MyProp}" Value=" ">
我有一个 TreeView,其 DataContext 是我的 ViewModel。 ViewModel 有一个 属性 MyProp
。在 TreeView 中,我定义了一个带有 DataTrigger 的 ItemContainerStyle:
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Style.Triggers>
<DataTrigger Binding={MyProp} Value="...">
<!-- does not work because DataContext is the Item, not the ViewModel -->
<Setter Property="Focusable" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
但是由于 ItemContainerStyle 有一个 Item 作为它的 DataContext 而不是 ViewModel,所以 DataTrigger 中的 Binding 不起作用。那么如何告诉 Binding 我想绑定到 ViewModel.MyProp
?似乎我无法在 Styles 和 Triggers 中设置 DataContext
,那我还能怎么做呢?
你有没有尝试获取你的相对来源:
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.MyProp}" Value=" ">