CanExecuteChanged 和 CommandManager.RequerySuggested 的实际任务是什么?

2023-12-25

我从 Josh Smith 的 MVVM 中得到了以下代码tutorial http://msdn.microsoft.com/en-us/magazine/dd419663.aspx.

谁能快速解释一下这段代码的实际用途?

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

我无法理解两件事:

  1. 什么是CanExecuteChanged事件呢?
  2. 什么是CommandManager.RequerySuggested do?

上面的代码来自于RelayCommand班级来自here http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090030.


  1. CanExecuteChanged通知任何命令源(例如Button or MenuItem)与此绑定ICommand返回的值CanExecute已经改变。命令源关心这一点,因为它们通常需要相应地更新其状态(例如,Button如果出现以下情况,将禁用自身CanExecute()回报false).
  2. The CommandManager.RequerySuggested每当CommandManager认为某些事情发生了变化,会影响命令的执行能力。例如,这可能是焦点的改变。事实证明这个事件火了很多。

因此,本质上,这段代码的作用是确保每当命令管理器认为命令的执行能力发生变化时,该命令都会引发CanExecuteChanged即使它实际上没有改变。

我实际上不喜欢这种实施方法ICommand.CanExecuteChanged- 感觉很懒而且不完全可靠。我更喜欢更细粒度的方法,其中命令公开一个方法(例如RaiseCanExecuteChanged()) 你可以打电话加注CanExecuteChanged,然后您在适当的时间从视图模型中调用它。

例如,如果您有一个删除当前选定客户的命令,它将有一个CanExecute()返回的处理程序true仅当有客户选择时。因此你会打电话RaiseCanExecuteChanged每当选定的客户发生变化时。

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

CanExecuteChanged 和 CommandManager.RequerySuggested 的实际任务是什么? 的相关文章

随机推荐

  • 如何从 Windows 设置环境变量

    在 windows xp 7 8 vista 10 等中添加环境变量的方法是什么 在 Windows 7 8 Vista 或 XP 中 在桌面或开始菜单中找到 我的电脑 图标 右键单击它 然后从菜单中选择 属性 项 当您看到属性对话框时 单
  • 在 Rails 中渲染 JSON 时包含关联模型

    现在我有这一行 render json programs except gt created at updated at 但是 由于程序属于公司 我想显示公司名称而不是公司 ID 渲染节目时如何包含公司名称 像这样的东西应该有效 rende
  • 如何通过 git pre-receive hook 验证用户身份

    我想写一个pre receivePython 中的 githook 据我了解 没有任何参数被传入pre receive脚本 而不是每个引用都是使用标准输入在单独的行上传递的 我已经能够通过以下方式阅读参考更改 usr bin env pyt
  • 如何创建具有静态返回类型的扩展方法?

    我试图编写一个简单的扩展方法Color返回该颜色的黑色和白色等效值的静态类 问题是扩展方法无法返回Static类型 那么 我该怎么做呢 请帮我 问题是没有方法可以返回静态类型 静态类是无状态的 或仅具有静态状态 因此只有一个 实例 可以从引
  • 对数据库中的所有表启用更改跟踪

    假设在 SQL Server 数据库上启用了更改跟踪 如何在数据库中的所有表上启用更改跟踪 您可以使用以下 T SQL 脚本生成另一个 T SQL 脚本 该脚本启用CHANGE TRACKING所有具有主键的表的功能 Step 1 Exec
  • 如何区分 jQuery 选择器字符串和其他字符串

    我想检查字符串的 类型 特别是 如何区分 jQuery 选择器字符串和其他字符串 也就是说 下面的代码中selectorTest应该如何实现呢 var stringType function value var htmlExpr lt lt
  • C++:#pragma comment(lib, "XXX") 实际上对“XXX”做什么?

    我的背景是 C 但我必须保留一些遗留的 MS C 在那个代码库中我偶然发现 pragma comment lib OtherLib700 lib 其中 700 是一些版本控制 除此之外 该库还有一个同名的 DLL 我首先认为该程序将依赖于
  • 如何从 OHLC 数据计算枢轴值

    我有一个带有 open high low close 和 key 列的 pandas 数据集 现在我想按键对数据集进行分组 并使用公式 最高价 最低价 收盘价 3 计算枢轴 到目前为止我可以做到 但要求是将计算的数据转移到下一组 我无法编码
  • pthread 中的信号处理

    我创建了一个 pthread 并在其中安装了一个信号处理程序 与我们在中所做的方式相同main 功能 线程的信号处理程序是一个单独的函数 令人惊讶的是 它不起作用 即线程的信号处理程序无法捕获信号 这是代码 include
  • NSNumberFormatterStyle.SpellOutStyle 中的错误?

    当我将 NSNumberFormatterStyle SpellOutStyle 用于较大的数字 不是溢出类型的数字 时 它似乎会在四万亿中的某个地方崩溃 let formatter NSNumberFormatter formatter
  • 为什么MySQL在违反唯一键约束时会出现自动增量间隙,但违反主键约束时却不会?

    我明白当使用INSERT ON DUPLICATE KEY UPDATE在 MySQL 中 当插入失败时 会出现自动增量间隙 然而 我注意到 只有在违反唯一键约束时才会出现间隙 如果主键约束失败 则不会出现自增间隙 两者差异的原因是什么 T
  • 当我尝试从表单 A 显示表单 B 时,为什么编译器会说“未声明的标识符”?

    为什么此代码不起作用 procedure TFormNotification Button3Click Sender TObject begin FormB Show end 我越来越未声明的标识符 error 您可能有一个名为的全局变量F
  • django {% if user.groups == 'FK' %} 不起作用[重复]

    这个问题在这里已经有答案了 我正在使用 django 制作一个网站 if user groups FC 在我的模板中不起作用 我有这样的组 For example one of my users username is hong belon
  • 如果查询中没有占位符/动态数据,您可以省略 PDO 准备吗?

    我目前正在开发一个将 PDO 与 MySQL 数据库结合使用的应用程序 我看到一些查询 它们非常简单SELECT声明 例如 SELECT FROM table ORDER BY name ASC 代码确实not use prepare 例如
  • 如何在 Protractor 中执行测试之前恢复数据库

    我在 Protractor 中编写了 E2E 测试 它使用节点通过 webdriver 运行 现在我有一些插入测试 它将插入数据并创建用户 现在 如果我第一次运行该案例 它将通过 但是当我重新运行测试时 它将失败 因为它已经存在 预期 当
  • Azure 可用性集和规模集的差异

    有人可以在 ARM 门户中定义两者之间的区别吗 另外 如果我需要将新的 Azure RM VM 添加到现有 AS 可用性集 PowerShell 会是什么 谢谢 普拉布 可用性集由一组离散的 VM 组成 这些 VM 具有自己的名称和各自的属
  • PowerMock + Robolectric + Dagger2。第一部分

    这个问题是从第一部分创建的PowerMock Robolectric Dagger2 https stackoverflow com questions 34689722 powermock robolectric dagger2 所以我又
  • 如何使用 MonthCalender 在文本框中插入日期?

    我有一个textBox1在我的Windows窗体中 我想用它来从用户那里获取日期 我想展示MonthCalender1一旦用户将光标放在textbox1然后在里面设置日期textbox1自动 然后日历就会消失 我如何使用 C 或 C CLI
  • Java 打印函数

    我需要帮助在另一个类的 java 应用程序中编写打印函数 printAll 的函数我认为是正确的 而其他函数肯定是错误的 public void printAll Iterator
  • CanExecuteChanged 和 CommandManager.RequerySuggested 的实际任务是什么?

    我从 Josh Smith 的 MVVM 中得到了以下代码tutorial http msdn microsoft com en us magazine dd419663 aspx 谁能快速解释一下这段代码的实际用途 public even