绑定到 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="  ">