使用hierarchicaldatatemplate时禁用treeview根节点

时间:2013-04-23 13:06:12

标签: wpf mvvm treeview hierarchicaldatatemplate

我正在使用WPF / MVVM来愚弄树视图控件

<TreeView HorizontalAlignment="Left" 
                  Height="319" 
                  VerticalAlignment="Top" 
                  Width="517"
                  ItemsSource="{Binding Tree}"
                  >
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                    <StackPanel Orientation="Horizontal">
                        <Button Width="100" Height="20" IsEnabled="{Binding IsEnabled}" Content="{Binding Name}" />
                    </StackPanel>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>

这是我的视图模型,带有节点类

public partial class MainWindow : Window
    {
        class TreeNode
        {
            public string Name { get; set; }
            public bool IsEnabled { get; set; }
            public List<TreeNode> Children { get; set; }
            public TreeNode()
            {
                Children = new List<TreeNode>();
                IsEnabled = true;
            }
        }

        class ViewModel
        {
            public List<TreeNode> Tree { get; private set; }
            public ViewModel()
            {
                Tree = new List<TreeNode>();
            }
        }

        public MainWindow()
        {
            InitializeComponent();

            var viewModel = new ViewModel
                {
                    Tree =
                        {
                            new TreeNode
                                {
                                    Name = "Root 1",
                                    IsEnabled = false,
                                    Children = {
                                        new TreeNode { Name = "Child 1" },
                                        new TreeNode { Name = "Child 2" },
                                        new TreeNode { Name = "Child 3", 
                                            Children =
                                                {
                                                    new TreeNode { Name = "Child 3-1" },
                                                    new TreeNode { Name = "Child 3-2" },
                                                    new TreeNode { Name = "Child 3-3" }, 
                                                }
                                        },
                                    }
                                }
                        }
                };

            DataContext = viewModel;
        }
    }

正如您所看到的,我将属性“IsEnabled”绑定到按钮,这一切都很好,但实际上我想将“IsEnabled”属性绑定到实际的根节点元素,而不是节点中的对象。 / p>

根据此属性值禁用整个根节点需要做什么?

1 个答案:

答案 0 :(得分:0)

为此,您实际上需要影响ItemContainerStyle的{​​{1}}。这将为为树的每个节点生成的ItemContainer(TreeView)设置样式。

TreeViewItem