WPF:TreeViewItem 绑定到 ICommand

2024-01-07

我正忙于在 WPF 中创建我的第一个 MVVM 应用程序。

基本上我遇到的问题是我有一个 TreeView (System.Windows.Controls.TreeView),我已将其放置在 WPF 窗口上,我决定将绑定到 CommandViewModel 项目的 ReadOnlyCollection,并且这些项目包含DisplayString、Tag 和 RelayCommand。

现在,在 XAML 中,我有了 TreeView,并且已成功将 ReadOnlyCollection 绑定到此。我可以查看此内容,并且用户界面中的一切看起来都很好。

现在的问题是我需要将 RelayCommand 绑定到 TreeViewItem 的命令,但是从我所看到的 TreeViewItem 没有命令。这是否迫使我在 IsSelected 属性中甚至在 TreeView_SelectedItemChanged 方法背后的代码中执行此操作,或者有没有办法在 WPF 中神奇地执行此操作?

这是我的代码:

<TreeView BorderBrush="{x:Null}" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch">
<TreeView.Items>
    <TreeViewItem
        Header="New Commands"
        ItemsSource="{Binding Commands}"
        DisplayMemberPath="DisplayName"
        IsExpanded="True">
    </TreeViewItem>
</TreeView.Items>

理想情况下,我很乐意去:

<TreeView BorderBrush="{x:Null}" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch">
<TreeView.Items>
    <TreeViewItem
        Header="New Trade"
        ItemsSource="{Binding Commands}"
        DisplayMemberPath="DisplayName"
        IsExpanded="True"
        Command="{Binding Path=Command}">
    </TreeViewItem>
</TreeView.Items>

有人有一个解决方案可以让我使用我拥有的 RelayCommand 基础设施吗?

谢谢各位,非常感谢!

Richard


我知道这个问题不久前就得到了“回答”,但由于答案并不理想,我想我应该投入两分钱。我使用的方法使我不必诉诸任何“样式按钮欺骗”,甚至不必使用代码隐藏,而是将所有分离保留在 MVVM 中。在您的 TreeView 中添加以下 xaml:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="SelectedItemChanged">
        <i:InvokeCommandAction Command="{Binding TreeviewSelectedItemChanged}" CommandParameter="{Binding ElementName=treeView, Path=SelectedItem}"/>
    </i:EventTrigger>
</i:Interaction.Triggers>

在您的 xaml 标头中添加:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

然后您必须在项目中添加对上述程序集的引用。

之后,一切的行为都与任何其他命令上的按钮或其他东西相同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF:TreeViewItem 绑定到 ICommand 的相关文章

随机推荐

  • RequiresApi 与 TargetApi Android 注释

    有什么区别RequiresApi and TargetApi 科特林示例 RequiresApi api Build VERSION CODES M TargetApi Build VERSION CODES M class Fingerp
  • 使用 -vsync 0 选项时,从 ffmpeg 中的 mp4 提取帧到 jpg 格式会产生错误

    我正在尝试使用 ffmpeg 从 mp4 视频中提取所有帧 我使用以下命令 ffmpeg i Users raimundbuehler recordings 2022 01 24 000 exports 001 world mp4 vsyn
  • Jersey 客户端 API 中的内容 MD5

    我正在尝试在使用 Jersey Client API 创建的请求上设置 Content MD5 标头 我创建了 ClientFilter 它实现了另一个适配器 类似于 GZipFilter 的工作方式 像这样 public class Co
  • EB CLI 参数化 CI 部署的部署工件名称

    使用 EB CLI 部署预构建的应用程序包 相关的 config yml 部分如下所示 deploy artifact Website zip 然而 CI 构建会创建一个文件 其中添加了版本 Website 1 5 44 zip 是否有任何
  • unicode和丹麦语之间的utf8排序规则差异

    嗯 你好 我正在更改数据库的字符集latin1 sweedish ci to utf8 我一直用utf8 danish ci因为我认为它最接近挪威的字符风格 但是关于utf8 general ci and utf8 unicode ci 前
  • Windows 也像 Linux 一样有 Inode 编号吗?

    Windows 也像 Linux 一样有 Inode 编号吗 Windows内部如何管理文件 使用的术语与您在 Unix 世界中找到的术语有点不同 但是就拥有唯一标识文件的整数而言 NTFS 和某些 Windows API 公开了类似的 文
  • 在 foreach 循环中取消设置数组值[重复]

    这个问题在这里已经有答案了 我设置了一个 foreach 循环来遍历我的数组 检查某个链接 如果找到 则从数组中删除该链接 My code foreach images as image if image http i27 tinypic
  • 无法重新启用 Google Cloud AppEngine 应用程序

    我曾经在我的项目上运行 NodeJS 灵活环境 AppEngine 应用程序 后来禁用了它 现在我正在尝试将基于 Java 的标准环境 AppEngine 应用程序部署到同一个项目 当我尝试部署时出现以下错误 INFO GCLOUD ERR
  • Flutter 字符串插值中的不间断空格

    我有时需要在 Flutter Text 小部件中使用不间断的空格 例如 显示更多 链接或带有 50 km h 等单位的数字 下面的代码工作正常 但看起来过于复杂 const int nbsp 0x00A0 from https pub de
  • V-data-table 通过 v-slot:body 控制扩展项

    vuetify 2 0 v data tables 的文档没有指定如何通过 v slot body 控制扩展项 我有一个需要用主体 V 型槽指定的表格 并且想要使用扩展功能 预期的行为是单击表中一列中的按钮 该行将在下面展开 我使用 v s
  • Android 导入 Facebook SDK

    我已经尝试在我的应用程序中添加 Facebook 登录 共享选项近 3 4 天 但我完全无法做到这一点 我在每一步中不断遇到错误 我一直在关注很多教程 这是其中之一 https developers facebook com quickst
  • UIButton 可以同时带有图像和文本吗?

    我有一个宽度为 200 高度为 270 的按钮 我想在同一个按钮上显示文本和图像 不作为该文本的背景图像 相反 我想在同一个按钮上显示高度为 120 的文本和高度为 150 的图像 怎么做 您可以使用此代码 它将满足您的目的 h file
  • 在 scikit-learn 中使用交叉验证时绘制精确率-召回率曲线

    我正在使用交叉验证来评估分类器的性能scikit learn我想绘制精确率 召回率曲线 我发现一个例子 http scikit learn org stable auto examples plot precision recall htm
  • 在 python 中更新 tkinter 标签

    我正在努力通过将服务器的根实例传递到 Tkinter 窗口来为 python 服务器提供带有 tkinter 的 GUI 问题在于如何使标签中的信息保持最新 例如 服务器有一个用户列表 其中包含登录的用户 对于初始列表来说 这样做很简单 s
  • excel vba-提取2个字符之间的文本

    如果我有这个专栏 ColA NUMBER 8 3 NUMBER 20 我需要一个可以运行的 VBA 函数 请注意 这些开始和结束字符串只会在单元格中出现一次 extract val 单元格 start str end str IE extr
  • 将参数从 Jenkinsfile 传递到共享库

    我有几个组件 带有自己的 Bitbucket 存储库的代码项目 每个组件都有一个 Jenkinsfile 如下所示 properties parameters string defaultValue description List of
  • Azure AD B2C - 从所有会话中注销用户

    我有 3 个网站使用一个 B2C 租户 我被要求进行设置 以便当用户退出一个网站时 退出所有网站 如果他们的帐户被删除 情况也是如此 我认为我必须在每个请求上引入对 Azure 的调用 以确定用户是否仍然登录 但据我所知 没有一个 Grap
  • 如何禁用 HTML 标签?

    如果已经设置了标签 我想禁用它 例如 使用禁用菜单disabled true 或者其他的东西 我可以使用 PHP 完全删除标签 但我已经设计了它的样式 只想禁用它 是否可以 不 据我所知 没有任何仅 CSS 的方法可以按照您描述的方式禁用链
  • Python 字符串格式化:“%”比“format”函数更有效吗?

    我想比较不同的变量以在 Python 中构建字符串 using 连接 称为 加 using using join list using format功能 using 0
  • WPF:TreeViewItem 绑定到 ICommand

    我正忙于在 WPF 中创建我的第一个 MVVM 应用程序 基本上我遇到的问题是我有一个 TreeView System Windows Controls TreeView 我已将其放置在 WPF 窗口上 我决定将绑定到 CommandVie