问题标签 [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 回答
400 浏览

wpf - Mark object (not entity, not framework) as dirty in WPF ViewModel

In my viewmodel, there is a property CurrentObject of the type SomeDomainType which is serializeable.

There is a form to edit its properties, and one of the buttons is "Commit Changes", databound to the ICommand CommitChangesCommand.

Now I expect this button to be active (via CanCommitChangesCommand(), properly wired with Josh Smith's RelayCommand) only when the object has been modified, that is, the object is "dirty".

Saying it again, what I want to ask is:

"How can I mark an object as dirty so that I could have a private bool ThatPropertyIsDirty() method to check that inside some CanExecute()?"

0 投票
4 回答
19315 浏览

wpf - MVVM RelayCommand 可以执行

我正在实现一个带有执行和 canExecute 部分的 RelayCommand。RelayCommand 在没有 canExecute 部分时工作,但是当我添加 canExecute 部分时,命令会锁定按钮。RelayCommand 只检查按钮是否可以执行,只要 CanExecute 部分为真。一旦 canExecute 部分变为假,按钮就不能再被点击,即使它应该被点击。如何确保每次单击按钮时它都会控制是否可以执行,并且一旦无法执行就不会永远锁定它?

0 投票
1 回答
321 浏览

wpf - 使用 ICommand 实现 CanExecute MVVM 灯

我有一个程序,其中一个按钮只有在相应的 userControl 具有焦点时才应该处于活动状态。

我正在使用 MVVM light,并获得了一个实现 ICommand 接口的命令。

我曾尝试使用 Keyboard.FocusedElement,但这没有返回任何内容。

这是命令的代码(请注意,它现在只是返回 true 以使其正常工作,这当然是我要修复的问题):

从视图模型:

最后是一些 XAML:

我还没有发布 userControl 的 xaml,但想法是当 userControl 有焦点时,CanExecute 应该是真的。我认为它可以与 Keyboard.FokusedElement 一起使用,但我错了。我能做些什么?

先感谢您。

0 投票
3 回答
3112 浏览

wpf - 将可见性绑定到 ReactiveCommand CanExecute

我的 xaml 中有几个 Tiles(TileLayoutControl 类)(此示例中仅显示 2 个),其 Visibility 绑定到 Boolean Properties 并通过 BooleanToVisibilityConverter 进行转换。
这工作得很好。我的问题是

我可以将可见性绑定到命令,以便我可以消除对这几个布尔属性的需要吗?

类似于将 Visibility 绑定到Command.CanExecute

如果是,我该如何实现?任何帮助将不胜感激!谢谢。

视图模型

0 投票
1 回答
1168 浏览

c# - Mvvmlight RelayCommand 中 canExecute 的奇怪行为

我正在学习 Mvvmlight,并且对它canExecute的 RelayCommand 感到很困惑。

基本上,我有一个Button和一个PasswordBoxview和一个CommandviewModel如果PasswordBox为空,我想要禁用Button。我的解决方案是将PasswordBox作为CommandParemeter传递给Button,然后在canExecute方法中接收PasswordBox并指定它是空还是空。我首先声明一个命令:

然后在以下实例化它Class Constructor

最后实现如下canExecute方法:

上面的 canExecute 方法不起作用,因为System.Reflection.TargetInvocationException会抛出未处理的异常PresentationFramework.dll

所以我尝试用 . 包装上面的代码try...catch。这一次,它就像魔术一样工作:

我对这种行为感到很困惑canExecute,有什么想法吗?

0 投票
1 回答
3036 浏览

wpf - ICommand 不使用 CanExecute 更新按钮上的 IsEnabled

我有一个绑定到命令的非常简单的按钮

我的命令代码

该代码有效地阻止了基于 CanExecuteSaveCommand 运行的命令,但该按钮永远不会被禁用,有没有办法实现这一点?

0 投票
1 回答
3020 浏览

c# - MVVM Light - RaiseCanExecuteChanged 用于 RelayCommand

我正在使用 MVVM 模式。我是我的观点,我有个人详细信息的文本框,其中之一是 idBox。此外,该视图由几个按钮组成,其中之一是 editModeBtn。

我希望只有在 idBox 中有一个有效的 int 时才启用 editModeBtn。

我的 editBtn 的 Xaml(在视图内)如下所示:

在相应的viewModel中,我有以下代码:

此外,在 CanExecute 方法(在我的情况下为 CanEdit)中,我想检查参数(id)是否设置为有效的 int,然后返回 true。假的,否则。

基本上,我希望在每次从 idBox 写入或删除某些内容时调用该命令的 canExecute 方法。我应该把命令的 RaiseCanExecuteChanged() 放在哪里?如果我没有使用过 MVVM,我可以将它放在 textBox textChanged 事件中,但这里不是这样。从未使用过 RaiseCanExecuteChanged,所以只想确保。谢谢!

0 投票
1 回答
1490 浏览

eclipse-rcp - Eclipse Luna:未调用处理程序的 @CanExecute 方法

我在 Eclipse Luna RCP 中的命令处理程序有问题。

在我的 E4 应用程序模型中,我定义了一些仅在特定情况下必须启用的命令和相关处理程序。出于这个原因,在我的处理程序 POJO 中,我实现了用@CanExecute我检查所需条件的位置注释的方法。

我还定义了与这些命令相关的菜单和工具栏项。

问题是我的@CanExecute方法没有被正确调用,因此菜单和工具栏项没有相应地启用/禁用。

特别是,对于菜单项,这些@CanExecute方法仅在应用程序启动时被调用几次,但在那之后就不再调用了。

相反,对于工具栏项,这些@CanExecute方法仅在活动上下文更改时调用(例如,当更改活动部分或打开新外壳时)。

在开普勒中,行为完全不同(并且按预期工作):

  • 对于菜单项,@CanExecute每次显示菜单时都会调用这些方法
  • @CanExecute对于工具栏项目,有一个计时器每 400 毫秒调用一次方法

这是 Luna 中的已知错误吗?您知道实现预期行为的任何可能的解决方法吗?

谢谢!

0 投票
2 回答
361 浏览

c# - 调用“command.Execute”会先隐式调用 CanExecute 吗?

我只是在没有先调用 CanExecute 的情况下实现了对命令的 Execute 调用。

从调试中我会告诉 CanExecute 被调用了;但是,我不确定这是否是巧合。

我想知道我是否可以依赖这样一个事实,即每当我手动提出 Execute 时都会隐式调用 CanExecute ,或者我是否应该确保自己调用 CanExecute ?

0 投票
0 回答
324 浏览

eclipse-rcp - Eclipse Luna:由于上下文错误,未调用处理程序的 @CanExecute 方法

我将我的 Eclipse RCP 应用程序从 Juno 升级到了 Luna。这导致我的应用程序工具栏被永久禁用。

我在这个线程中找到了一个解决方案:Eclipse Luna: Handlers' @CanExecute methods not called(解决方案:手动生成事件)。但是,唉,治愈没有奏效:-(。

我使用调试器深入研究以找到失败的根本原因。我发现在HandlerServiceHandler.class方法setEnabled(Object evaluationContext)失败。这是由于从评估上下文中提取了错误的执行上下文。

我将详细介绍:发生的情况是,在我对项目浏览器执行选择后,我发送了我的事件。setEnabled(Object evaluationContext)查找与我的工具栏项关联的相关命令的处理程序。但是,它会在项目浏览器的 * 执行上下文 * 中查找处理程序。处理程序不在此上下文中,因此该方法失败!

关于如何解决这个问题的任何想法。我真的不明白我如何能很好地控制我的上下文。

谢谢!!!!!