问题标签 [delegatecommand]

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 投票
2 回答
913 浏览

c# - 通过 WPF 中 ViewModel 中的命令将 UserControl 添加到画布

我有一个 UserControl 说 Stock,它有一个 Button 叫做 Display

现在,当我单击此按钮时,它应该将另一个名为 Display 的 UserControl 添加到位于 HomeWindow 中的 Canvas 中,并且应该将 CommandParameter 传递给 Display userControl。

0 投票
1 回答
210 浏览

mvvm - 使用 DataForm 和外部保存按钮

我有一个带有 AutoCommit = "False" 的 DataForm 和一个绑定到命令 SaveCommand 的外部保存按钮。

如果我希望在未对数据(我正在使用 ViewModel)进行任何更改时禁用 Save 命令,我何时必须执行 SaveCommand.RaiseECanExecuteChanges()?

0 投票
2 回答
92 浏览

wpf - 主页上的 Silverlight 按钮,链接到命令,从不调用方法

我是 Silverlight 的新手,而且我有点过头了,所以我可能遗漏了一些非常明显的东西。我正在使用图像编辑器,我的主页上有一个按钮,可以在我的画布上旋转图像或文本。但是,该按钮没有调用我的旋转方法。编辑:现在是。

这是我编写的与按钮相关的所有代码

主页.xaml

项目.cs -

现在的问题是它只会旋转一次,并且一些图像质量似乎也会丢失。当我单击并拖动它们时,图像会奇怪地移动,有时当我单击完整的图像质量时会返回。

如果有人对此有任何想法,那就太好了。

0 投票
1 回答
2109 浏览

.net - 为什么这个 DelegateCommand 不能用后台工作人员正确刷新 CanExecute?

在 WPF 中使用 DelegateCommand 我面临以下问题:

如果在 UI 线程上执行命令,则在后台工作人员中执行 Command1 会阻止窗口正确刷新按钮的 CanExecute,一切都按预期工作。在按钮外部单击 CanExecute 会正确刷新。有什么提示吗?

(下面是 DelegateCommand 的代码,如果它太大,抱歉。据我所知,这是 DelegateCommand 的常见实现)

XAML:

C#:

}

委托命令 C#:

和 CommandManager:

0 投票
1 回答
1212 浏览

wpf - ContextMenu 命令绑定

我继承了针对旧版本 Prism(复合应用程序指南 1.0)开发的 WPF 应用程序。此应用程序中的一般模式是在 ViewModel 中使用 Microsoft.Practices.Composite.Wpf.DelegateCommand 并避免代码隐藏事件处理程序。它使用 MVP 模式,其中 Presenter 表示 XAML 绑定到的 ViewModel。

我有一个带有 ContextMenu 的 DataGrid,XAML 绑定如下所示:

DoStuffCommand 实际上是一个自定义的 CommandBase 对象,它作为一个属性暴露在 Presenter 上。DoStuffCommand.Command 是实际的 DelegateCommand 对象。DelagateCommand 是使用 Presenter 中定义的 Execute 和 CanExecute 方法构造的(this.DoStuff、this.DoStuffCanExecute)。

在第一次右键单击时调用 CanExecute,但在随后的任何单击中都不会调用。此外,页面上还有其他命令随后调用 DoStuffCommand.Command.RaiseCanExecuteChanged。当这种情况发生时,CanExecute 方法实际上被称为 TWICE。

最初的开发人员通过在数据网格上连接一个右键单击事件并显式调用 RaiseCanExecuteChanged 来解决它。该解决方案的问题在于 CanExecute 每次运行两次。我已经简化了这篇文章的代码,但实际上该上下文菜单中有六个不同的命令,每个事件都会触发两次,这会导致性能问题和其他故障。

我想正确解决这个问题,以便在打开 ContextMenu 时触发一次事件,仅此而已。感觉好像可能会附加多个事件处理程序,解决方案就在这篇文章的某个地方,我已经详细研究过了。 WPF ViewModel 命令可以执行问题

这些解决方案似乎深藏在 Prism 库中,我不确定如何将其正确放入我的解决方案中。如果可能,我想避免接触或更新我们的 Prism 库。

0 投票
3 回答
1916 浏览

wpf - How can I simplify the implementation of Commands in ViewModels for WPF/MVVM?

I have noticed that I am repeating a lot of code when implementing Commands on ViewModels for a MVVM-WPF scenario. The standard implementation, as shown below, consists of a public readonly field of type ICommand, a private DelegateCommand field and a method for the execution logic. DelegateCommand gets initialized in the ICommands get-accessor.

How can this approach be condensed, considering the repetition for every command?

0 投票
0 回答
144 浏览

c# - 如何在单个线程中同步运行方法?

我有一个方法,我只希望一个线程一次运行一个。

问题是,这个方法的执行与命令相结合,所以当用户非常快地连续按几次按钮时,我的方法会被同一个线程连续调用几次。在这种情况下,锁定不起作用,因为同一个线程只是一次又一次地获得锁定。我觉得奇怪的是,同一线程连续多次调用同一方法,而该方法的早期调用尚未完成。

有没有办法强制一个方法一次只从一个线程运行一个?

0 投票
1 回答
3362 浏览

c# - DelegateCommand 的重载方法

我有一个 DelegateCommand 类,其中包含 2 个构造函数。当我将我的属性传递给该类的构造函数时,我收到一条错误消息:

对于我的 DelegateCommand,这是我所拥有的(没有注释以保持简短):

这是我要传递的属性和函数:

因为第一个错误必须处理重载方法,所以我知道我只是忽略了一些非常简单的东西。至于第二个错误,什么是更好的处理方法,因为我无法通过该属性。

0 投票
3 回答
7249 浏览

c# - 如何对调用 MVVM 中的异步方法的 DelegateCommand 进行单元测试

我是单元测试 MVVM 的新手,并在我的项目中使用 PRISM。我正在我们当前的项目上实施单元测试,并且没有运气在线找到资源来告诉我如何测试调用异步方法的 DelegateCommand。这是我的帖子的后续问题 -如何使用异步方法对 ViewModel 进行单元测试。关于如何在 MVVM 中对异步方法进行单元测试,并回答说可以使用异步 TestMethod 测试公共方法。仅当我要测试的方法是公共方法时,此方案才有效。

问题是我想测试我的 DelegateCommand,因为这是我想在其他类上公开的唯一公开细节,其他一切都是私有的。我可以公开我的私有方法,但我永远不会这样做,因为它是一个糟糕的设计。我不确定如何解决这个问题 - 是否需要测试 DelegateCommand,或者还有其他一些工作可以解决这个问题?我很想知道其他人是如何做到这一点的,并以某种方式引导我走上正确的道路。

这是我的代码

这也是我的虚拟机中调用上述异步方法的命令

现在我的测试方法就像

目前我得到的是我的 ViewModel.SimpleTask = null 这是因为它不等待异步方法完成。

0 投票
1 回答
788 浏览

wpf - WPF Prism MVVM - 同一页中的“带有命令的部分视图”,如何订阅命令?

我的项目使用 Prism 和 Unity 使用 MVVM 设计模式,基本上遵循 Brian Lagunas 著名的 Prism 视频,但视频没有提到如何创建/使用局部视图,用户控件用于其他用户控件。

我正在尝试创建可以在其他页面(用户控件)中重用的自定义局部视图(用户控件)。例如,一个视图包含一个“浏览”按钮,绑定 SelectFileCommand 并在完成后发布文件路径。如果我在一页中有两个这样的视图,我怎样才能订阅正确的命令?两个命令称为相同的名称。

对于使用局部视图:

在模块中注册视图类型,如下所示:

并直接在页面中使用视图,如下所示:

我不确定这是否是实现 Prism MVVM 模式的正确方法。请让我知道这是否是错误的想法,以及如何实现这些部分视图。

非常感谢。