问题标签 [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.
wpf - DelegateCommand 抛出“指定的演员表无效”
我想使用带有 bool 作为参数的 PRISM 委托命令。这是相关代码:
当我在其中设置断点时,CanExecuteChangeZoomPan
它永远不会被击中。问题发生在ChangeZoomPanCommand.RaiseCanExecuteChanged()
.
这是堆栈跟踪:
>
如果我将参数类型更改为字符串,一切似乎都有效。然后我当然会得到一个“False”字符串作为参数,因为那是我的 xaml 命令参数。为什么这不适用于任何 T,因为 T 似乎没有限制。我已经发现 T 必须是一个对象或可为空的,但即使是可空的似乎也不合适。如何使用布尔参数?
谢谢
wpf - 棱镜:必须显式调用 RaiseCanExecuteChanged()
下面是一个非常简单的Prism.Wpf
示例,DelegateCommand
其中包含Execute
和CanExecute
代表。
假设这CanExecute
取决于某些属性。与其他 MVVM 框架一样,当此属性更改时,PrismDelegateCommand
似乎不会自动重新评估条件。相反,您必须在属性设置器中显式调用 RaiseCanExecuteChanged()。这会导致在任何重要的视图模型中出现大量重复代码。CanExecute
RelayCommand
有没有更好的办法?
视图模型:
查看:
c# - PRISM (ViewModel):确保一个命令不会同时执行多次
我正在尝试禁用频繁的用户手势,以便同一命令不会同时执行多次。
我不确定我这样做是否正确。
- 是
SemaphoreSlim
矫枉过正还是我应该把它留在那里以确保安全? - 需要,因为我
ObservesCanExecute()
手动打开和关闭标志? - 我在同一个视图模型中有几个命令,每个命令都有一个单独的 CanExecute 标志。我想我很快就会遇到需要在另一个命令运行时启用一个命令的情况。
_semaphoreSlim
是在一个命令正在进行时推迟所有命令,还是推迟对同一命令的多次调用?
c# - 为什么不调用此命令?
这是我认为有ListView
问题的相关部分:
因此,第一列是一个绑定到IsSelected
行项目属性a 的复选框PickListPerson
。
该命令声明PersonPickListViewModel
如下:
我将视图模型作为命令参数传递,以便在命令的操作委托的静态上下文中访问视图模型的实例属性。
然而,当我单击标题列复选框时,不会调用此命令。为什么会这样?
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 单词,它会捕获它!!!
我现在做错了什么?
谢谢
c# - Prism DelgateComand 抛出异常
我有一个静态委托命令。我将一个布尔值传递给构造函数。但是,它会引发运行时异常。
wpf - WPF如何为当前活动的tabitem执行命令?
我TabControl Region
在外壳视图中使用棱镜。
每个都TabItem
包含AView
和AViewModel
。
我可以TabItem
使用IsActive
.AViewModel
IsActive
属性设置为true
仅针对当前选定的 TabItem。
我在Shell
视图中有一个按钮,它负责为TabItems
.
根据当前活动启用禁用按钮的正确方法是什么TabItem
(设置可以执行command
为true
或false
),并且只为活动视图执行逻辑。从放置在其他视图中的按钮?
我已经设法command
通过创建来执行composite command
,然后将命令从 注册AViewModel
到composite command
,并将其中的按钮绑定shell
到composite command
。
这种方法的问题是,如果任何命令返回false
它们都是除了一个(活动的TabItem
)之外的,则没有任何命令被执行。
CompositeCommand 类维护一个子命令列表(DelegateCommand 实例)。CompositeCommand 类的 Execute 方法只是在每个子命令上依次调用 Execute 方法。CanExecute 方法类似地调用每个子命令的 CanExecute 方法,但是如果任何子命令无法执行,CanExecute 方法将返回 false。换句话说,默认情况下,只有当所有子命令都可以执行时,才能执行 CompositeCommand。 资源
c# - 在类对象的 setter 中实现 RaiseCanExecuteChanged 方法
我仍然不确定我的方法是否正确,但为了尝试实现 MVVM 模式,我通过以下方式创建了一个模型类“测试”:
然后我在我的ViewModel
:
并且在View
我的XAML代码中通过属性绑定了Test
类的所有TestVM
属性。虽然这很好用,但我在尝试实现DelegateCommad
.
到目前为止,在实现DelegateCommand
s 时,如果我想CanExecute
在属性发生更改时触发该方法,我将包含DelegateCommand.RaiseCanExecuteChanged()
在属性的 setter 中。像这样:
这对于在 中声明的属性很好ViewModel
,但是当对Test
属性使用相同的方法时,这不再有效。
我希望每次TestVM
更改属性时,都会调用 setter,而是直接更新模型。
我究竟做错了什么?在中使用Model
对象时正确的方法是ViewModel
什么?
mvvm - 使命令 1-time-executable
什么是最好的做法,使一个框架只在DelegateCommand
一次可执行,以防止点击垃圾邮件可能导致应用程序崩溃的按钮。非常感谢!Prism
MVVM
c# - 单独类中的 DelegateCommand 第一次调用 CanExecute 参数为空
我有以下问题。我已将 DelegateCommand 从 ViewModel 移至单独的类。并观察 ViewModel 中的一个属性。到目前为止有效。
然后 CanExecute 将在视图初始化时调用第一个 NULL 。这也是正确的。然后第一次调用 OnNavigatedTo 并设置 TestModel。但是 CanExecute 再次使用 NULL 调用,这是错误的。如果第二次调用 OnNavigatedTo 并设置了 TestModel,则该值将正确传递给 CanExecute 方法。
命令类:
视图模型:
看法:
我不知道为什么这第一次不起作用。由于 RaiseCanExecuteChanged 直接工作。
感谢你的帮助 :-)