【问题标题】:Using Commands in WPF TreeView with HierarchicalDataTemplate在带有 HierarchicalDataTemplate 的 WPF TreeView 中使用命令
【发布时间】:2013-01-31 02:58:02
【问题描述】:

有没有办法在树视图中使用带有 HierarchicalDataTemplate 的命令,以便我可以对单击树视图中的项目做出反应? 如果有的话,我更喜欢没有代码隐藏的解决方案。

这是我的树视图:

<TreeView ItemsSource="{Binding Main.TreeItems}">
    <TreeView.ItemTemplate>                     
        <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
            <TextBlock Text="{Binding Path=Header}" />
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>                
</TreeView>

【问题讨论】:

    标签: wpf treeview command hierarchicaldatatemplate


    【解决方案1】:

    在您的项目 (ViewModel) 上提供 ICommand 类型的属性并绑定到该属性。所以你的项目类会是这样的:

    class MyTreeItem
    {
       public MyTreeItem()
       {
          this.SomeCommand = /* create command here */ null;
          this.Children = new ObservableCollection<MyTreeItem>();
       }
    
       public ICommand SomeCommand { get; private set; }
    
       public ObservableCollection<MyTreeItem> Children { get; private set; }
    }
    

    然后您可以在 xaml 中编写:

    <TreeView ItemsSource="{Binding Main.TreeItems}">
        <TreeView.ItemTemplate>                     
           <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
                <TextBlock Text="{TemplateBinding Header}" />
                <Button Text="My Command" Command="{TemplateBinding SomeCommand}" />
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>                
    </TreeView>
    

    我认为应该可以,至少上次我使用它时效果相似:)

    【讨论】:

    • 确定按钮我可以使用命令属性。但是在树视图中有按钮并不好。 ;-) 有没有办法在点击文本块时做到这一点?
    • stackoverflow.com/questions/7003507/… 可能是您正在寻找的 :)
    • 这是一个很好的解决方案,如果我的文本块不在树视图中,它会很好地工作。但是对于我的问题,如果在树视图中使用 textblock 元素,它就不起作用。知道为什么吗?
    • 您确定您使用的是模板绑定吗?
    • 模板绑定不适用于鼠标绑定,我不想在树视图中使用按钮
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多