问题标签 [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.
c# - 上下文菜单打开时不会引发 CanExecute
我知道有一些相关的问题,但没有一个能帮助我找到问题。
大多数答案建议实施 CanExecuteChanged ,如this answer所示。好吧,这不是我的问题的解决方案。我有一个 RelayCommand 的实现,类似于Josh Smith 的实现。(类似,因为我们的实现增加了更多细节,但核心实现是相同的。)
在网上搜索时,我还了解到,如果没有焦点元素,路由将在 ContextMenu 处停止,并且不会到达 MenuItem。在这种情况下会有所帮助的解决方案如下所示。
但是,如果确实没有任何重点元素,我与 Snoop 进行了核对,并了解到这不是问题所在。无论如何,修复并没有帮助。
此外,我在一个测试项目中模拟了这个问题并且能够修复它。所以修复通常有效,它只是没有帮助我。但是,我认为仍有机会我必须稍微调整修复以使其正常工作。我尝试MyControl
了而不是ContextMenu
作为 AncestorType 并且我尝试PlacementTarget.Tag
了而不是仅仅PlacementTarget
作为Path
但我不知道还有什么办法让它工作(假设这是错误)。
有趣的是,当我手动调用 CommandManager.InvalidateRequerySuggested() 时,它甚至不起作用。我添加了一个在 ContextMenuOpening 上引发的命令。我认为这会迫使 CanExecute 被执行,但似乎我错了。
因此,我现在正在寻找在打开 ContextMenu 时未引发处理程序的进一步原因CanExecute
以及如何解决该问题。
这是我的 XAML 代码(包括EventTrigger
for ContextMenuOpening
):
以下是MyCommand
(Can)Execute 处理程序的定义:
这是我的OnContextMenuOpening
处理程序,我试图强制MyCommand
提升 CanExecute :
c# - 通知用户命令无法执行
我有一个与这样的命令相关联的文本框:
该属性TextContent
是在 ViewModel 中定义的字符串。该命令MyCommand
也在 ViewModel 中定义。ViewModel 不知道 View。
只要 TextBox 具有焦点并按下回车键,就会调用该命令。不幸的是,如果CanExecute
返回 false,则用户无法(视觉上)看到该命令未执行,因为 TextBox 中没有视觉上的变化。
我正在寻找有关如何向用户显示该命令在他按下回车后无法执行的建议。
我的想法(以及我对它们的怀疑):
CanExecute
返回时禁用 TextBoxfalse
:这不是选项,因为CanExecute
每次键入/更改字母时,返回值都会发生变化(TextBox 中的文本会影响 的结果CanExecute
)。当它第一次被禁用时,用户不能再输入它,所以它将永远保持禁用状态。显示一个消息框,说明命令未执行:记住,ViewModel 不知道 View。甚至可以从 ViewModel 打开一个消息框吗?此外,我应该在哪里调用打开消息框?不在里面
CanExecute
,因为我只想在按 enter 后获取消息框,而不是每次都CanExecute
返回false
。也许 makeCanExecute
总是返回true
并在内部进行检查Execute
:如果检查正常,则执行命令,否则,向用户显示一些消息。但是,CanExecute
完全错过了拥有的意义……
我想保留 MVVM,但是一些用于将内容重定向到 ViewModel 的代码隐藏对我来说似乎没问题。
mvvm - WPF MVVM Command CanExecute,仅在焦点更改时重新评估
在WPF中重构一个MVVM项目,我试图摆脱 MVVM 模式用户之间似乎常见的问题。
我有观点,谁的DataContext是MyViewModel。这是一个按钮,与实现 Execute 和 CanExecute 的命令绑定。
XAML:
MyViewModel公开ConnectCommand:
(最后是我正在使用的 DelegateCommand 的定义)
MyViewModel还公开了属性IsConnectEnabled,用于命令的 CanExecute 部分:
MyViewModel类实现INotifyPropertyChanged接口
该命令的CanExecute部分仅根据应用程序中焦点的变化进行评估(即,无论我做什么点击)。我知道UpdateSourceTrigger默认设置为PropertyChanged ,因此我当前的解决方案是在代码中的几个位置手动引发PropertyChanged事件。但我想做得更好,并在IsConnectEnabled的值发生变化时自动完成此活动。
WPF 和 MVVM 模式是否为这个问题提供了解决方案?
为了完整起见,请遵循我正在使用的完整ICommand实现DelegateCommand:
c# - Relaycommand ICommand.CanExecute 未触发
我有以下问题:
我有一个带有执行 canexecute 方法的中继命令,但每次我调用 raisecanexecutechanged(); 它在 relaycommand 中调用 raisecanexecutechanged,为其设置一个新的委托,然后返回到视图模型。
相同的设置适用于另一个视图模型。我检查了 1000 次有什么不同,但我什么也没找到。
如果您能帮助我,我将不胜感激。
编辑:我使用的中继命令:https ://github.com/briannoyes/WPFMVVM-StarterCode/blob/master/ZzaDashboard/ZzaDashboard/RelayCommand.cs
wpf - WPF 命令可以在模板内执行验证
我有一个嵌套的数据网格,其中我有绑定到 RelayCommands 的 + 和 - 按钮,它们分别添加新行或删除当前行。如果只有一个项目留在其类别中,减号按钮命令的 CanExecute 逻辑应该禁用当前行的减号按钮。
问题在于,由于其模板性质,它禁用了所有类别中的所有减号按钮。
如何减轻这种情况?
这是代码。
XAML
C#
wpf - 即使有模式窗口,WPF ICommand CanExecute 也会被调用
假设我有一个带有按钮的用户控件
命令类实现 ICommand 接口。
当焦点位于上述对话框时,有时会调用 CanExecute。
这是可以预料的。
问题是当我单击按钮时,会调用 Execute 方法并弹出一个新的模式对话框。
重点应该放在新对话框上,但由于某些原因,当我与新对话框交互时,CanExecute 仍然会被调用。
这种行为正常吗?
我怎样才能覆盖这种行为?
我不希望在显示子模式对话框时调用附加到父对话框控件的命令的 CanExecute 方法。
ruby-on-rails - 如何用 cane gem 排除方法以避免 abc 复杂性
嗨,我正在使用 Cane gem 进行 RoR项目。我在交互器中有一个方法。我得到了Methods exceeded maximum allowed ABC complexity (1):
这种方法。我想排除这种方法来检查复杂性。所以我尝试了:
但它仍然会引发同样的错误。请帮助我如何仅针对此方法忽略 ABC 复杂性。提前致谢。
wpf - WPF按钮可以执行样式吗?
我第一次将“CanExecute”设置为“True”以外的任何内容......当“CanExecute”为假时,我不喜欢按钮上的默认灰色背景。
例如,如果“CanExecute”为“False”,我想将背景更改为“Red”(假设“CanExecute”操纵了 IsEnabled 属性,这似乎不正确)。任何建议表示赞赏。如果有一个很好的链接可以获得此类问题的初学者级答案,那也将不胜感激。
我刚刚复制并尝试修改此示例,不确定它与正确的距离有多近:
mvvm - 使命令 1-time-executable
什么是最好的做法,使一个框架只在DelegateCommand
一次可执行,以防止点击垃圾邮件可能导致应用程序崩溃的按钮。非常感谢!Prism
MVVM