WPF 自定义 ICommand 实现和 CanExecuteChanged 事件

2023-12-05

在我的 WPF UI 中,我使用通过以下代码在 xaml 中引用的 RoutedCommands:

Command="viewModel:MessageListViewModel.DeleteMessagesCommand"

我不喜欢这个到我的 ViewModel 类的静态链接,我认为这不如创建自定义 ICommand 实现并使用如下所示的语法那么好

Command="{Binding DeleteMessagesCommand}"

创建一个后,我注意到我所做的一个主要缺点:RoatedCommands 利用 CommandManager 并(以某种对我来说完全不透明的方式)触发 CommandManager.RequerySuggested 事件,以便自动重新查询它们的 CanExecute 方法。至于我的自定义实现,CanExecute 仅在启动时触发一次,此后不再触发。

有人对此有一个优雅的解决方案吗?


只需实施CanExecuteChanged事件如下:

public event EventHandler CanExecuteChanged
{
    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }
}

当您将命令分配给控件时,它会订阅CanExecuteChanged事件。如果您将其“重定向”到CommandManager.RequerySuggested事件,无论何时都会通知控件CommandManager.RequerySuggested被触发。

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

WPF 自定义 ICommand 实现和 CanExecuteChanged 事件 的相关文章

  • Wpf ICollectionView 绑定项无法解析类型对象的属性

    我已经绑定了一个GridView与ICollectionView在 XAML 设计器中 属性是未知的 因为CollectionView已转化为类型Object并且无法访问实体属性 它运行良好 没有错误 但设计器将其显示为错误 如果我绑定到集
  • 带有复选框的 WPF ListBox:在选中之前选择复选框

    Problem 我有一个列表框 其中列表框是复选框 第一次单击时 复选框将被选中并选中 第二次单击时 仅设置复选框 人们可以使用箭头键重新选择不同的复选框 我的目标是 首先选择复选框 然后再检查 再次单击它 从而消除对箭头键的需要 Goal
  • 专家 C#/.Net/WPF 开发人员应该了解哪些知识? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • WPF中ViewModel是否应该继承DependencyObject?

    我尝试创建一个简单的UserControl在 WPF 中使用 MVVM 现在我需要为UserControl 所以我尝试在中创建依赖属性UserControlViewModel 我不想处于代码隐藏状态 为了创建依赖属性UserControlV
  • 如何创建自动滚动文本框

    我有一个 WPF 应用程序 其中包含一个多行文本框 用于显示调试文本输出 如何设置文本框 以便将文本附加到框中时 它会自动滚动到文本框的底部 我正在使用 MVVM 模式 理想情况下 纯 XAML 方法会很好 TextBox 本身不一定是焦点
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • 如何在 Oxyplot 中显示折线图的绘图点?

    这是我的图表的 xaml 代码
  • WPF 中按钮的启用和禁用状态的不同图像

    我想根据按钮的状态更改下面代码中按钮的图像 即使用不同的图像来启用和禁用状态
  • C# - 继承WPF布局 - Window from Window

    我的 Window 继承有问题 我不明白问题是什么 我认为 我的布局 MediaLibrary xaml 必须继承 MainWindow 但我不知道该怎么做 有2类 主窗口 xaml
  • 将集合绑定到自定义控件属性

    我没有运气尝试将数据集合绑定到我的自定义控件的属性 我已经实现了该控件的字符串属性的机制 在此处提供了一些帮助 并期望集合类型同样简单 但是我无法让它再次工作 这是我的自定义控件视图
  • 如何在标准 WPF ListView 中启用 UI 虚拟化

    我正在使用 NET 4 5 VS2012 并且我有一个 ListView 看起来像这样
  • WPF:使用 StringFormat={}{0:F2} 进行文本框绑定。不显示零

    我使用以下 XAML 将对象绑定到 TextBox
  • 基于另一个组合框的所选项目绑定组合框 - MVVM WPF

    我目前有一个组合框 其中填充了艺术家姓名 一旦选择了艺术家 我需要将其绑定到另一个组合框 在我看来 这些设置如下
  • 有没有基于 WPF 的 Markdown 渲染器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们有基于 WPF 的应用程序 我们有单独的字符串存储库 其中的文本在网络中进行编辑 在我们的 WPF
  • 关闭主窗口时 WPF 应用程序不会关闭

    我习惯了在 Visual Studio 中进行 WinForms 编程 但我想尝试一下 WPF 我向我的项目添加了另一个窗口 名为 Window01 主窗口称为MainWindow 之前public MainWindow 构造函数我声明Wi
  • 如何将 WPF 窗口置于前面?

    我创建了一个单实例应用程序 并且希望在用户多次启动该应用程序时激活已打开的窗口 这工作正常 但我有一个问题 如果已经打开的窗口超出了另一个应用程序窗口 我必须将其放在前面 我尝试过 window Focus 和 window Show 但它
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • OxyPlot WPF 不适用于按钮单击

    我在使用 OxyPlot 时遇到了一些问题 但无法通过他们的文档或其他搜索来解决 我正在开发一个 wpf 应用程序 它允许用户通过按钮单击事件打开 csv 然后执行一些数学运算并报告一些有用的信息 我想绘制一些生成的数据 因此使用 OxyP
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base

随机推荐

  • IIS 服务器和 ASP.Net Core - 500.19,httpplatformhandler 标记上的错误代码为 0x8007000d

    当我尝试使用 IIS Server v7 5 启动 ASP Net Core 应用程序时 出现以下错误 我已成功将网站 Visual Studio 中的文件系统选项 发布到特定目录 它可以从 approot web cmd 文件正常启动 但
  • 为 Android 标记信息窗口添加图像

    我正在制作一个 Android 应用程序 在此应用程序中 有一些酒店的标记 当用户单击标记信息窗口时会出现 它应该如下图所示 这是一个网络应用程序 我的导航抽屉片段中有一个列表视图 地图片段有标记 这是我尝试加载信息窗口图像之前的代码Mai
  • Cython 是否提供任何相当简单且有效的方法来迭代 Numpy 数组,就好像它们是扁平的一样?

    假设我想实现 Numpy 的 x 1 在赛通 我可以写 cython boundscheck False cython wraparoundcheck False def add1 np ndarray np float32 t ndim
  • 如何在 HTML5 中播放 3gp 视频?

    使用 HTML5 播放 3gp 文件不起作用 我有 Firefox 16 和 Chromium Version 22 我得到的结果如下 找不到格式和 MIME 类型受支持的视频 这是我使用的代码
  • 替换来自 stdin bash 的 Curl 请求中的 JSON 正文

    我正在尝试使用来自标准输入的输入填充卷曲请求正文中的一个变量 echo 123 curl d query match number XPOST url com 不幸的是 没有被替换 我希望请求的正文与以下内容相匹配 query match
  • 使用 smtp 时 Hotmail SSL3 版本号错误

    我正在尝试使用 python 中的 hotmail smtp 服务器 但是 我的登录尝试出现了明显的 SSL3 版本号错误 如何更改我正在使用的版本以及如何调查此问题 gt gt s connect smtp live com 587 22
  • matplotlib 中的垂直线和水平线

    我不太明白为什么我无法在指定的限制内创建水平和垂直线 我想用这个框绑定数据 然而 双方似乎并没有遵守我的指示 为什么是这样 CREATING A BOUNDING BOX BOTTOM HORIZONTAL plt axhline y 4
  • Rails 中的求和与分组

    我有一个这样定义的表 Name Order Widget Count Bob 12311 6 Nancy 12555 8 BoB 87573 12 Nancy 12929 4 我想这样检索它们 Bob 18 Nancy 12 即 它们的小部
  • VB.Net(或 C#)2008 多线程导入

    我希望构建一个多线程文本导入工具 通常是 CSV 到 SQL Server 2005 并希望在 VB NET 中执行此操作 但我并不反对 C 我有 VS 2008 试用版 只是不知道从哪里开始 谁能指出我可以在哪里查看和使用源代码的方向VE
  • 将 T-SQL string_agg 转换为 LINQ C#

    我正在尝试将 T SQL 查询转换为 LINQ 我的查询 SELECT l Id s SystemSerial v LicenseVersion l CreatedDate STRING AGG sf Name as Features FR
  • 使用 jQuery 的日期选择器突出显示特定范围内的日期

    我需要突出显示开始日期和结束日期之间的日期 我应该能够指定这些日期 谁能帮我 您可以使用演出日之前活动 对于需要在日历中显示的每个日期都会调用它 它传入一个日期并返回一个数组 0 isSelectable 1 cssClass 2 Some
  • 根据点之间的距离排序?

    我有一个由 3 个点 A B 和 C 组成的向量 我想根据这些点之间的距离对该向量进行排序 假设最大距离是 B 和 C 之间的距离 而不是 C 和 A 之间的距离以及最后的 A 和 B 之间的距离 我怎样才能做到这一点 std sort v
  • 我的编辑按钮在下一页不起作用(仅在第一页起作用)

    我的编辑和删除查询仅适用于数据表的第一页 但不适用于第二页 我正在使用 ajax 和 jquery 我是新人 这是我在大学的项目 谢谢你帮助我 这是代码
  • 如何通过 ssh 将 echo 的输出重定向到文件

    我正在尝试通过 ssh 将变量的内容重定向到文件 喜欢 ssh MachineIP echo CM Config gt mName CM CONFIG where CM Config是我的主机中包含多行的局部变量 并且 mName CM C
  • 为什么我们必须重写 Java 中的 equals() 方法?

    我对我们覆盖的原因有些困惑 equals method 例如 Test test1 new Test 3 Test test2 new Test 3 The if comparison does the same thing that th
  • Windows 窗体应用程序错误与水晶报告

    我是Windows窗体应用程序的新手 这是我在办公室的第一次申请 我的办公室管理人员给了我源代码 但他们对此一无所知 我在 Visual Studio 12 64 位 上运行这些代码 一切都在运行 但水晶报表不起作用 抛出错误 错误是 无法
  • 创建 WPF 自定义控件

    我目前正在使用 WPF 创建用户界面 并希望在我的窗口上显示饼图 据我所知 这将涉及创建自定义控件 在这种情况下 将样式或模板应用于现有控件就足够了 我读过几篇关于自定义控件的文章 所有提供详细描述的文章似乎都使用了非常不同的方法 不同的作
  • 如何解析此输出并分隔每个字段/单词

    这是阿克沙塔 我陷入了解析以下数据的困境 我想单独获取每个单词 我可以有一个示例代码以便我可以继续吗 RTRV HDR RH01 SIMULATOR 09 11 18 16 13 19 M RH01 COMPLD RTRV EQPT ALL
  • 进程死亡后如何使用接口在活动之间进行通信?

    我正在构建一个 SDK 需要在活动之间实现回调 但没有实际完成活动 我之前使用 onActivityResult 将结果提供给调用者活动 但是 这会关闭活动 我需要传递回调 无需完成 SDK 的活动 我当前的实现 fun initializ
  • WPF 自定义 ICommand 实现和 CanExecuteChanged 事件

    在我的 WPF UI 中 我使用通过以下代码在 xaml 中引用的 RoutedCommands Command viewModel MessageListViewModel DeleteMessagesCommand 我不喜欢这个到我的