问题标签 [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 投票
3 回答
4439 浏览

wpf - DelegateCommand 抛出“指定的演员表无效”

我想使用带有 bool 作为参数的 PRISM 委托命令。这是相关代码:

当我在其中设置断点时,CanExecuteChangeZoomPan它永远不会被击中。问题发生在ChangeZoomPanCommand.RaiseCanExecuteChanged().

这是堆栈跟踪:

>

如果我将参数类型更改为字符串,一切似乎都有效。然后我当然会得到一个“False”字符串作为参数,因为那是我的 xaml 命令参数。为什么这不适用于任何 T,因为 T 似乎没有限制。我已经发现 T 必须是一个对象或可为空的,但即使是可空的似乎也不合适。如何使用布尔参数?

谢谢

0 投票
2 回答
4102 浏览

wpf - 棱镜:必须显式调用 RaiseCanExecuteChanged()

下面是一个非常简单的Prism.Wpf示例,DelegateCommand其中包含ExecuteCanExecute代表。

假设这CanExecute取决于某些属性。与其他 MVVM 框架一样,当此属性更改时,PrismDelegateCommand似乎不会自动重新评估条件。相反,您必须在属性设置器中显式调用 RaiseCanExecuteChanged()。这会导致在任何重要的视图模型中出现大量重复代码。CanExecuteRelayCommand

有没有更好的办法?

视图模型

查看

0 投票
1 回答
324 浏览

c# - PRISM (ViewModel):确保一个命令不会同时执行多次

我正在尝试禁用频繁的用户手势,以便同一命令不会同时执行多次。

我不确定我这样做是否正确。

  • SemaphoreSlim矫枉过正还是我应该把它留在那里以确保安全?
  • 需要,因为我ObservesCanExecute()手动打开和关闭标志?
  • 我在同一个视图模型中有几个命令,每个命令都有一个单独的 CanExecute 标志。我想我很快就会遇到需要在另一个命令运行时启用一个命令的情况。_semaphoreSlim是在一个命令正在进行时推迟所有命令,还是推迟对同一命令的多次调用?
0 投票
1 回答
63 浏览

c# - 为什么不调用此命令?

这是我认为有ListView问题的相关部分:

因此,第一列是一个绑定到IsSelected行项目属性a 的复选框PickListPerson

该命令声明PersonPickListViewModel如下:

我将视图模型作为命令参数传递,以便在命令的操作委托的静态上下文中访问视图模型的实例属性。

然而,当我单击标题列复选框时,不会调用此命令。为什么会这样?

0 投票
1 回答
414 浏览

asynchronous - Prism Async DelegateCommand 中的异常处理

我在异步 DelegateCommand(Prism 5)中捕获异常时遇到了很多麻烦。

在 ViewModel 的构造函数中:

在视图模型中:

为什么异常没有被捕获?我知道这是另一个线程,但无论如何它都应该被外部 Try...Catch 块捕获(Try Catch 外部:await Task.Run(())。

在此处输入图像描述

注意:它是 vb.net 代码,但 C# 解决方案也可以。

更新 2 一旦我知道我的调试器配置有问题(第一次机会例外),我写了一个更现实的例子,同样的问题:

现在当我按 F5 时它不会捕获异常。它在“throwMyException()”中中断,尽管它在 Try Catch 块内被调用,但它不会捕获异常。

重要提示:如果我删除“throwMyException”中的 Async 单词,它会捕获它!!!

我现在做错了什么?

谢谢

0 投票
1 回答
667 浏览

c# - Prism DelgateComand 抛出异常

我有一个静态委托命令。我将一个布尔值传递给构造函数。但是,它会引发运行时异常。

0 投票
3 回答
939 浏览

wpf - WPF如何为当前活动的tabitem执行命令?

TabControl Region在外壳视图中使用棱镜。

每个都TabItem包含AViewAViewModel

我可以TabItem使用IsActive.AViewModel

IsActive属性设置为true仅针对当前选定的 TabItem。

我在Shell视图中有一个按钮,它负责为TabItems.

根据当前活动启用禁用按钮的正确方法是什么TabItem(设置可以执行commandtruefalse,并且只为活动视图执行逻辑。从放置在其他视图中的按钮?

我已经设法command通过创建来执行composite command,然后将命令从 注册AViewModelcomposite command,并将其中的按钮绑定shellcomposite command

这种方法的问题是,如果任何命令返回false它们都是除了一个(活动的TabItem之外的,则没有任何命令被执行。

CompositeCommand 类维护一个子命令列表(DelegateCommand 实例)。CompositeCommand 类的 Execute 方法只是在每个子命令上依次调用 Execute 方法。CanExecute 方法类似地调用每个子命令的 CanExecute 方法,但是如果任何子命令无法执行,CanExecute 方法将返回 false。换句话说,默认情况下,只有当所有子命令都可以执行时,才能执行 CompositeCommand。 资源

0 投票
1 回答
548 浏览

c# - 在类对象的 setter 中实现 RaiseCanExecuteChanged 方法

我仍然不确定我的方法是否正确,但为了尝试实现 MVVM 模式,我通过以下方式创建了一个模型类“测试”:

然后我在我的ViewModel

并且在View我的XAML代码中通过属性绑定了Test类的所有TestVM属性。虽然这很好用,但我在尝试实现DelegateCommad.

到目前为止,在实现DelegateCommands 时,如果我想CanExecute在属性发生更改时触发该方法,我将包含DelegateCommand.RaiseCanExecuteChanged()在属性的 setter 中。像这样:

这对于在 中声明的属性很好ViewModel,但是当对Test属性使用相同的方法时,这不再有效。

我希望每次TestVM更改属性时,都会调用 setter,而是直接更新模型。

我究竟做错了什么?在中使用Model对象时正确的方法是ViewModel什么?

0 投票
1 回答
49 浏览

mvvm - 使命令 1-time-executable

什么是最好的做法,使一个框架只在DelegateCommand一次可执行,以防止点击垃圾邮件可能导致应用程序崩溃的按钮。非常感谢!PrismMVVM

0 投票
0 回答
326 浏览

c# - 单独类中的 DelegateCommand 第一次调用 CanExecute 参数为空

我有以下问题。我已将 DelegateCommand 从 ViewModel 移至单独的类。并观察 ViewModel 中的一个属性。到目前为止有效。

然后 CanExecute 将在视图初始化时调用第一个 NULL 。这也是正确的。然后第一次调用 OnNavigatedTo 并设置 TestModel。但是 CanExecute 再次使用 NULL 调用,这是错误的。如果第二次调用 OnNavigatedTo 并设置了 TestModel,则该值将正确传递给 CanExecute 方法。

命令类:

视图模型:

看法:

我不知道为什么这第一次不起作用。由于 RaiseCanExecuteChanged 直接工作。

感谢你的帮助 :-)