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

wpf - relaycommand CanExecute 返回不正确的值

我创建了一个非常标准的 MVVM Light RelayCommand,canExecute 参数为:

() => (customer.Regions.Count > 0)

必要时我打电话RaiseCanExecuteChanged();给 canExecute 并没有正确重新评估。然后我也像这样手动调用它:var canExecute = myCommand.CanExecute(null);,它仍然是错误的。在 I do 之后的下一条语句中var foo = (customer.Regions.Count > 0),它返回正确的结果。这里发生了什么?

命令定义:

customer 是实例化类时设置的私有属性。

0 投票
1 回答
912 浏览

wpf - WPF - 按钮控件模板...当 Command.CanExecute 为 false 时保持模板项启用

我有一个 listView,其中每个项目都包含一个包含 Button 的 dataTemplate。这是由于要求单击列表项将像单击按钮一样使您进入“向导”的下一步。

DataTemplate 中的每个 Button 都包含一个 ControlTemplate。

当命令的 CanExecute 为 false 时,此 controlTemplate 中的项目将被禁用。特别是在我下面的示例中,Button 模板内的 Button(以图像为模板的那个)也被禁用。

即使禁用了与该按钮关联的命令,如何保持模板内的项目处于启用状态。

摘要:按钮的模板包含另一个按钮。当父按钮的命令被禁用时,模板内的按钮被禁用。

XAML:

0 投票
1 回答
722 浏览

wpf - 如何使 ICommand CanExecute 以 false 开头?

我的 viewModel 中有错误验证,因此当它的UserName长度不是至少 2 个字符时,它会出现验证错误。

当我的应用程序启动时,该字段没有经过验证,被认为没有错误。只有当 setter 被调用时,它才会检查输入是否有效。在我的表格中,这会导致加载时TextBox. 但是,一旦用户输入一个字符,UserNamesetter 就会被调用,它会看到长度小于 2 个字符,因此会出现验证错误。

这就是它默认的工作方式,这就是我想要的。我不想从打开表单开始并在TextBox.

现在,在这个表单上,我有一个绑定到 ICommand 的按钮。当论坛加载时,由于该UserName字段在技术上不被认为有任何错误,因此启用了该按钮。但是,当用户输入一个字符时,它会变为禁用,如果他删除所有内容,它将保持禁用状态。

我希望我的表单加载没有任何错误,但要禁用该按钮。

现在,我的CanExecute()方法是检查我在 ViewModel 中拥有的字段,该字段基本上检查errors列表计数是否大于 0。如果是,则它有错误并因此返回 true。如果不是,则返回 false。

我有办法解决上述困境,但我不喜欢它。我有一张这样的支票。

现在这看起来很好,但是如果我有更多的字段要检查,例如Addressand Port,我也必须添加这些。所有这一切真正的作用是为 提供这个初始的 false CanExeute(),它在所有其他时间都是无用的,因为它将是多余的。如果UserName.Length < 2,当然errors.数组中会有一些错误。

很好,如果创建 my ICommand(在本例中是DelegateCommandfrom Prism),我可以将其初始化为 false 并因此禁用。

0 投票
1 回答
451 浏览

wpf - 使用VS2010在线模板“WPF MVVM项目模板”,CanExecuteChanged不起作用?

我在 VS2010->WPF MVVM 项目模板中通过 Online Templates->WPF 创建了一个新的 WPF MVVM 应用程序。我创建了一个标有“刷新已启用?”的复选框。在“刷新”按钮旁边,我想在单击时启用/禁用“刷新”按钮。IsChecked我将我的复选框的属性绑定到aMainWindowViewModel我调用的属性,并在其设置器中CanRefreshDate引发。RaisePropertyChanged(()=>CanRefreshDate);同样在 中MainWindowViewModel,我添加了我新创建CanExecuteRefreshDate()的,它返回属性的布尔值CanRefreshDate。但是,当我单击复选框时,“刷新”按钮永远不会启用/禁用以匹配。解决此问题的正确方法是什么,这是模板中的疏忽还是什么?

这是我对模板代码的修改:

xml:

MainWindowViewModel.cs:

我注意到模板在 DelegateCommand.cs 中RaiseCanExecuteChanged()拼写错误RasieCanExecuteChanged()并更改了它。通过删除RaiseCanExecuteChanged()和修改

至 :

但是,我想知道什么是正确的解决方案,以及为什么模板不起作用。我错过了什么,做错了什么还是什么?请创建一个新的解决方案并使用我所做的模板并告诉我发生了什么!谢谢!

0 投票
1 回答
1983 浏览

wpf - WPF 按钮命令绑定已刷新,但按钮仍处于禁用状态

我有一个奇怪的问题,按钮的命令绑定没有更新......

我有一个用 MvvmLight 编写的应用程序,它允许用户维护医疗系统列表。这些系统是从模板构建的(即一个模板可以指定两个相机、一个图像采集卡等,以及关于每个部分应该包含什么的详细信息)。如果修改了模板,则可以升级系统以使用新模板。系统窗口和模板窗口都是无模式的,因此可以在查看系统时修改模板。如果模板更新,模板窗口视图模型会发出一条消息,以便任何打开的系统窗口都可以做出相应的反应。

系统视图包含一个边框,用于在用户需要升级系统时发出警告。边界的可见性绑定到系统实体上的布尔属性,该属性将系统的修订号与基础模板的最新修订号进行比较。如果他们在最新的模板修订版上,则可见性设置为折叠,因此他们看不到内容。

如果系统使用较旧的版本,则边框是可见的,并且内容包含一条消息,通知他们需要升级,以及进行升级的按钮。我有这个边框和按钮的三个场景......

1) 如果系统在打开窗口时使用了过期的版本,则显示边框,并且按钮可见。如果修改了模板,则消息会正确更新以显示新号码,并且按钮仍然可见。这是对的。

2) 如果系统打开时使用的是最新的模板修订版,那么当模板被修订时,边框正确显示,消息正确更新,按钮启用。同样,这是正确的,只要我之后关闭系统窗口。

3)但是,如果我点击更新按钮,那么在系统升级并且边框被隐藏后,我再次更新模板,然后当边框重新显示时,按钮被禁用。我尝试从 CanExecute 方法中删除所有逻辑并仅返回 true,因此应该启用该按钮,但事实并非如此。我必须关闭系统窗口并重新打开它才能启用该按钮。

我尝试向视图模型添加一个事件,每当更新模板时我都会引发该事件。我在视图中捕获了这个事件并手动刷新了按钮的命令绑定。但是,这并没有导致 CanExecute 方法被再次调用,并且该按钮保持禁用状态。

我意识到这有点令人困惑,并且很难在没有看到整个事情的情况下进行调试,但我希望有人能给我一些线索。如果有帮助,这里是相关代码...

首先,边框、消息和按钮的 XAML...

显示 CanExecute 方法没有任何意义,因为它只包含“return true;”。眼下!

看起来好像在边框的可见性和按钮的启用状态之间发生了一些奇怪的交互,这似乎覆盖了 CanExecute 方法的结果。

有人有什么想法吗?请随时询问我是否忘记在此处添加任何重要内容。提前致谢。

0 投票
4 回答
2088 浏览

c# - 清除时未刷新文本框绑定

我有一个表单,其中包含一些绑定到某个对象属性的 TextBox:

我有一个“确定按钮”映射到这样的 CanExecute() 命令(不显示事件部分,但确保它有效):

问题:

  • 如果我将 Car Id 字段设置为某个值,则该按钮处于启用状态。
  • 如果我删除 Car Id 的值,则不会发生任何事情。调试一下,Car.CarId 实际上还是设置为我之前设置的值!

提前感谢您对此的提示!

0 投票
1 回答
1180 浏览

wpf - 字段更改时可以执行 WPF 命令

我想做的事情相当简单,但是我没有在网上看到关于如何做的例子。如果字段已更改,我希望启用“更新”按钮。

上下文:我有一个 WPF 表单,它更新数据库中的一行。我不希望用户能够单击“更新”按钮,除非他/她修改了某些表单值。我正在使用 MVVM 模式并且有 4 个可以更新的属性(姓名、地址、电话和电子邮件)。除非用户更改这些属性之一,否则我不希望启用更新按钮。

谢谢!

命令代码(我不确定在 CanExecute 中放置什么样的验证)

0 投票
1 回答
715 浏览

wpf - 可以在上下文菜单打开时执行 ICommand

一个 Control 有它ContextMenu并且它MenuItem被绑定到一个ICommand. ICommand 的 Can Execute 有一些代码可以启用和禁用MenuItem. 这会在加载并检查 Can Execute 时命中,但它可以在打开时命中,ContexMenu并且每次打开时都需要命中(检查)ContextMenu

怎么可能做到这一点。任何想法?

0 投票
1 回答
2231 浏览

java - File.canExecute() 说每个文件都是可执行的?

我正在使用此代码对其进行测试;

这输出每个文件都是可执行文件。我在这里做错了什么,还是这是一个java错误?我在 Windows 7、netbeans 7.3.1 和 java 7 上。

0 投票
1 回答
1065 浏览

wpf - 在上下文菜单打开时强制重新评估 ICommand CanExecute

我知道我可以在视图模型中强制重新评估 CanExecute,但是,这需要视图模型注册到所有相关的数据更改事件,这可能并不总是可行的。

由于命令仅在上下文菜单中使用,并且在上下文菜单打开期间,影响 CanExecute 的数据无法更改,因此仅在打开上下文菜单时重新评估 CanExecute 就足够了。

为此,我可以连接上下文菜单打开事件并调用视图模型以在上下文菜单使用的每个 ICommand 上调用 RaiseCanExecuteChanged,但这很乏味且反 MVVM。我想知道是否有更简单的方法来实现这一目标?