问题标签 [icommand]

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 回答
2276 浏览

wpf - 键盘快捷键的命令路由

基本上我想创建一个在窗口范围内有效的键盘快捷键,而不仅仅是在焦点位于绑定它的控件内时启用。

更详细....

我有一个包含 3 个控件的窗口:

  • 工具栏
  • 一个文本框
  • 自定义控件

工具栏有一个绑定到 Command 的按钮CustomCommands.CmdA,并链接到键盘快捷键Ctrl+ T

我的自定义控件可以处理CmdA。当我运行应用程序并单击我的自定义控件时,我的自定义控件CmdA已启用并且工作正常。Ctrl+也会T导致命令触发。

但是,当我选择文本框时,我的自定义命令CmdA将被禁用。

我可以通过设置CmdA按钮的命令目标来纠正这个问题。现在当我选择文本框时,CmdA仍然启用。

但是键盘快捷键Ctrl+T什么也不做。

有没有简单的方法来改变键盘快捷键的范围?或者我是否需要在较低的某个地方捕捉按键,并计算出它与哪个命令相关并自己路由它(如果是这样,是否有一个框架可以做到这一点?)

0 投票
3 回答
14695 浏览

wpf - WPF 和 MVVM。绑定事件

我正在使用 MVVM 模式、RelayCommand 等开发 WPF 应用程序。我在这个问题上读了很多,但我不清楚:

我要做的就是移动一个形状,例如椭圆,然后捕获它的最终位置,以放入数据库中。

但我无法将事件(MouseLetButtonDown、MouseLeftButtonUp 和 MouseMove)绑定到命令。我已阅读有关附加行为的信息,但我需要事件的参数(MouseButtonEventArgs 和 MouseEventArgs)来检索位置。

解决方案?

0 投票
1 回答
2591 浏览

mvvm - MVVM 中的 Silverlight 多命令绑定

我开始使用 MVVM 构建 Silverlight 应用程序。我在 XAML 页面上有一个按钮,可以在单击时保存数据我已经编写了以下代码。

在视图模型类中,我实现了以下代码;

哪种适用于我的保存命令。我的问题是如果页面上有多个按钮,那么我是否必须为每个按钮编写与上面相同的代码?任何机构都可以提出更好的方法吗?

0 投票
1 回答
659 浏览

mvvm - WPF RibbonControl 命令

我刚开始使用 Microsoft 的 WPF RibbonControl 库(2010 年 10 月版)。似乎现在可以使用 ICommand 实现,并将 RibbonCommand 替换为对 MVVM 更友好的实现。

但是,我无法将 viewmodel 命令(在我的例子中作为 prism DelegateCommand)数据绑定到视图,就像我对标准按钮所做的那样。

这基本上是我正在寻找的:

在视图模型中:

在 XAML 中:

然而,该命令从未被触发。任何提示都将受到欢迎。

0 投票
1 回答
410 浏览

wpf - 简单的 WPF MVVM 命令问题 - 此代码有什么问题?

我正在尝试使用 MVVM 在我的 UI 中的按钮上设置命令。但是,当我单击按钮时,该命令不会执行。该代码基于Jason Dolinger 的示例(第 3 段中的链接)。

看起来应该很简单,所以我敢肯定,一旦发现问题所在,我会感到很傻。

相关代码位如下。命令如下(很简单):

XAML 看起来像:

ViewModel 看起来像:

0 投票
7 回答
29620 浏览

wpf - 将列表框项内的命令绑定到视图模型父级上的属性

我已经为此工作了大约一个小时,并查看了所有相关的 SO 问题。

我的问题很简单:

我有 HomePageVieModel:

我的标记:

该列表显示所有项目都很好,但是对于我的生活,无论我为命令尝试什么都行不通:

我总是得到:

System.Windows.Data 错误:4:找不到与参考绑定的源.....

更新 我正在这样设置我的 ViewModel?没想到这很重要:

我使用了 MVVMLight 工具包中的 ViewModelLocator 类,它具有魔力。

0 投票
1 回答
4038 浏览

c# - WPF MVVM 命令:多个命令参数

也许我的问题更多的是架构而不是功能,但是我正在尝试将 TextBox 绑定到命令,并且在该命令中,我想传递多个参数(即自定义对象)。不确定如何以声明性方式(xaml)执行此操作。

ViewA(位于 ViewModelA 之上) 它有一个 TextBox,它绑定到CommandX

ViewB(位于 ViewModelB 之上) (这实际上是与 ViewA 在同一窗口中的另一个用户控件) 当 commandX 触发时,ViewModelB 需要执行一些方法。ViewModelB 需要更新多个属性才能执行该方法。

我的问题是,我如何构建我的命令/架构,以便 ViewModelB 有足够的信息来执行它的方法。

旁注:ViewModelA 拥有 ViewModelB 执行其方法所需的所有信息。但是,我不想从那里得到它,因为稍后我希望从不同的视图执行 CommandX

更新

看来我可以单独设置 CommandParameter 属性,这可能会绑定到 ViewModelA 中的复杂类型。这应该足以满足所有必要的属性。

惊人的

这行得通!这是我的参数属性在 ViewA 上的样子

和按钮实现

更新

这个解决方案有一个小障碍。命令参数绑定到属性。但它在加载时检索它,而不是在执行命令时检索它。我需要它在命令执行时发生,以便所有属性都具有最新值。关于如何实现这一目标的任何想法?

0 投票
4 回答
3890 浏览

wpf - 多窗口 WPF 应用程序中的命令绑定

我的应用程序可以有多个设计器窗口。每个窗口由几个用户控件组成,这些控件在 RelayCommands 的帮助下进行动态通信。我创建了以下类作为指挥基础设施的骨干。

用户控件的每个视图模型都会在构造函数中执行类似的操作

但是,我完全忽略了应用程序可以有多个窗口这一点。当每个窗口打开时,都会为该特定窗口设置静态命令。

例子:

窗口 A 已打开 - 用户控件的构造函数设置了 RelayCommands,一切都很好。

窗口 B 打开-用户控件的构造函数设置了 RelayCommands。窗口 A 的命令绑定丢失!

因此,当我将选项卡更改为窗口 A(窗口为选项卡)时,没有任何命令起作用。

我需要一些想法,这样当我更改选项卡时,活动窗口总是会设置命令。我可以尝试将命令放在 tab_selection_changed 事件中,但不知何故它对我来说看起来很糟糕。有没有合适的方法来做到这一点?任何帮助深表感谢。

编辑:

这个问题在读者中被证明有点令人困惑。我不是想为一个命令创建多个订阅者。在任何给定点,只有一个窗口处于活动状态。这个窗口由几个用户控件组成——其中一些是在命令的帮助下动态加载的;但是每个命令都由单个视图模型类处理-因此没有多个订阅者。我的问题是应用程序可以在选项卡中加载多个窗口——在任何给定点只有一个窗口处于活动状态——但用户可以对不同的选项卡执行操作并使另一个窗口处于活动状态。由于视图模型构造函数分配了静态 RelayCommands,当加载每个新窗口时,静态命令被设置为新绑定。

窗口 A 打开的窗口 视图模型构造函数将静态命令绑定到其对象命令处理程序。窗口 A 处于活动状态。指挥就好。

窗口 B 加载的窗口 B 视图模型构造函数将静态命令绑定到其对象命令处理程序。窗口 B 处于活动状态。指挥就好。

现在,用户选择窗口 A 选项卡以将窗口 A 设置为活动状态。指挥是行不通的。当然它不会因为命令绑定到窗口 B 命令处理程序。

从理论上讲,静态命令可以处理这种情况,因为在任何给定点都只有一个活动窗口。但是怎么办??

0 投票
3 回答
3041 浏览

c# - 将 C# ActionCommand:ICommand 翻译成 VB.net

我找到了一个 C# 类 ActionCommand,它实现了 ICommand 并基于 Execute 和 CanExecute 的委托。到目前为止看起来对我来说很完美。

现在我将它翻译成我需要的 VB.net 变体(使用代码翻译器和一些动手操作)

我的问题是围绕 CanExecuteChanged 并将事件从 CommandManager.RequerySuggested 注册/映射到 CanExecuteChanged。在线代码翻译器建议如下:

但这不能满足 ICommand.CanExecuteChanged 有人可以帮忙翻译或解决这个问题吗?

0 投票
1 回答
2842 浏览

c# - 为什么我的 Command.CanExecute 在单元测试中总是返回 false?

我的粘贴命令似乎在正常执行期间工作,但在单元测试中该CanExecute方法总是返回false.

代码:

单元测试: