问题标签 [canexecute]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
177 浏览

wpf - 使用 CommandManager 时对 ICommand.CanExecute 进行单元测试

(部分)我的 ICommand 实现是:

这在调用 RaiseCanExecuteChanged() 时在 UI 中工作正常,但在单元测试中我想知道 UI 是否已被通知它应该调用 CanExecute 方法。订阅 CanExecuteChanged 事件不起作用,因为使用 CommandManager 时不会触发此事件。有谁知道如何测试 CommandManager.InvalidateRequerySuggested 是否已被触发?

我也在考虑不使用 CommandManager 并将我的实现更改为:

优点似乎是这只会触发针对特定命令调用 CanExecute,而不是针对向 CommandManager 注册的所有命令。有人可以确认我对 CommandManager 的理解是正确的吗?有谁知道这种“正常” CanExecuteChanged 事件的方法的缺点?

0 投票
1 回答
288 浏览

c# - Jenkins 失败的单元 CanExecute 测试的方法不确定

我们对项目中的各种命令进行了很多 CanExecute 测试。当我们使用 Visual Studio 测试或 AxoCover 时,所有测试都正确通过。

我们尝试在执行“CanExecute”之前添加一些先前的对象初始化,有时它会起作用(或者我们认为)。

我有一个测试:

有时(不总是)当 Jenkins 进行构建和运行单元测试时,一些可以执行的测试失败并显示消息:

问题是这种情况只发生在 Jenkins 上,而且非常不确定。

编辑:

好的,还要考虑一件事。属性 InEditMode 放置在 SomeModelView 的基父类中。

我在示例中为您合并了代码。

我们认为这可能是相关的,该对象认为在基类初始化完成之前已初始化。但这很难用詹金斯检查。


解决方案

我创建了一个属性类:

然后我可以为每个“CanExecute”测试这个属性:

0 投票
1 回答
17 浏览

wpf - 如何根据更改的属性激活命令

我的 WPF-(弹出)控件中有两个按钮。
首先是一个取消按钮,它只是关闭弹出窗口并始终启用。

第二个是确定按钮,只有在三个(绑定)文本框之一发生更改时才应启用该按钮。

问题是,在文本框失去焦点之前,绑定属性的值没有改变。所以该按钮直到那时才处于活动状态,因此使用鼠标不可点击。

负责的视图模型代码:

由于其中一个属性被更改并且相应的文本失去焦点,一切正常。

有没有办法让这个 mPropertiesChanged 为真,而 textbos 仍然有焦点?

0 投票
1 回答
237 浏览

wpf - Model的属性发生变化时如何触发ViewModel的CanExecute方法?

我的问题是如何从模型中触发 ViewModel 方法。

我正在使用 MVVM 开发 WPF 应用程序。所以我有一个按钮,,SubmitMedPrescCommand(使用中继命令实现)和一个SelectedMedPrescRepeat绑定到模型的组合框()。当用户选择下拉菜单时,会在模型的属性中引发 PropertyChange 事件,但我需要调用 CanExecute(在 ViewModel 中)才能启用按钮。

下面列出了我的代码示例。任何帮助,将不胜感激 !提前致谢 !

视图模型是这样的:

以及属性所属的模型:

0 投票
1 回答
21 浏览

c# - 如何为 WPF 双文本框正确设置 CanExecuteCommand?

对于此示例,我使用Prism.WPF。我的 WPF 中有一个 TextBox 和一个按钮:

和相应的属性:

如果用户更改值以输入正确的双精度值,则方法应可执行:

我试图将双精度转换为带有“。”的字符串。作为分隔符并检查string.IsNullOrEmpty(),但这并没有导致成功。如何正确检查用户是否输入了有效的双精度值?