为每个 TreeViewItem 绑定 TreeViewItem.IsEnabled 到 ViewModel 属性

Bind TreeViewItem.IsEnabled to ViewModel property for each TreeViewItem

我有一个 ViewModel,其中包含一个名为 AllNodesAndEntries 的可观察项目集合。每个项目都有一个布尔值 属性 IsEnabled。现在我想在 TreeView 中显示项目并将每个 TreeViewItem 的 IsEnabled 属性 绑定到其 ViewModel 基础项目的 IsEnabled 属性。 我该怎么做?

这是我的 TreeView。有两种不同类型的项目(NodeEntry),所以我有一个分层数据模板和一个普通数据模板。

<TreeView ItemsSource="{Binding AllNodesAndEntries}">
        <TreeView.Resources>
            <HierarchicalDataTemplate ItemsSource="{Binding Children}" DataType="{x:Type local:Node}">
                <TextBlock Text="{Binding Name}"/>
            </HierarchicalDataTemplate>
            <DataTemplate DataType="{x:Type local:Entry}">
                <TextBlock Text="{Binding Name}""/>
            </DataTemplate>
        </TreeView.Resources>
        <TreeView.ItemContainerStyle>
            <Style TargetType="{x:Type TreeViewItem}">
                <!-- How do I bind to TreeViewItem.IsEnabled to IsEnabled? -->
            </Style>
        </TreeView.ItemContainerStyle>
    </TreeView>

好像不能在TreeView.ItemContainerStyle里面做,因为那里只能定义setter。但是设置器不允许绑定值...

使用 setter 将 "IsEnabled" 属性 绑定到每个 TreeViewItem 的 "IsEnabled" 项 属性。

<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}">
        <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
    </Style>
 </TreeView.ItemContainerStyle>