如何在WPF中创建不可选择的TreeViewItem

时间:2010-05-01 14:56:12

标签: wpf triggers styles

我正在绑定TreeView。我的理由是树视图级别0是不可选择的。当我单击0级treeviewitem时,必须折叠当前项目并且必须选择第一个子项目。

├ Item 1   //<- level 0. this item must be unselectable
├─ Child Item 11 //<- level 1
├─ Child Item 12
├ Item 2   //<- level 0. When i click this item, that is automatically collapse
├─ Child Item 21
├─ Child Item 22

如何使用样式做到这一点?

1 个答案:

答案 0 :(得分:7)

我会在我的视图模型中执行此操作。 0级项目的视图模型将具有:

public bool IsSelected
{
    get { return false; }
    set
    {
        // error checking is omitted
        Children[0].IsSelected = value;

        // let WPF know that IsSelected may have changed from what it's expecting
        this.Dispatcher.BeginInvoke((ThreadStart)delegate
        {
            this.OnPropertyChanged(() => this.IsSelected);
        });
    }
}

你的XAML看起来像是:

<TreeView>
    <TreeView.ItemContainerStyle>
        <Style TargetType="TreeViewItem">
            <Setter Property="IsSelected" Value="{Binding IsSelected}"/>
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView>

现在,只要用户点击第一级项目,VM就会拒绝被选中,而是选择第一个子项目。

您可以使用完全相同的技术来处理折叠级别的要求。