问题标签 [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.
.net - 无法订阅 DelegateCommand.CanExecuteChanged
我有两个 ViewModel,一个包含另一个。内层有一个Microsoft.Practices.Prism.Commands.DelegateCommand
叫PrintCommand
。最好订阅CanExecuteChanged
此命令的事件。这部分照常实现:
问题是这个订阅不起作用。反编译后CanExecuteChanged
的样子:
当我调试时,订阅后的几个步骤后_canExecuteChangedHandlers
似乎不包含任何活动处理程序,即使订阅者对象仍然存在。
我有点好奇,为什么会这样?
c# - 没有 PRISM 的绑定命令
自从我开始使用 MVVM 以来,我一直使用 PRISM 的 DelegateCommand 类将我的视图模型中的命令绑定到我的视图中的按钮命令。我相信 Telerik 也有一个等效的 DelegateCommand。
我的问题是,是否有使用 prism 和 telerik 等 3rd 方框架的内置替代方案。如果我将一个快速的一次性应用程序放在一起,我可能不想从 NuGet 安装包的麻烦。有没有办法使用 Func 或 Action 或委托来实现相同的目标?
c# - MVVM ICommand.CanExecute 参数包含以前的值
如果使用嵌套属性而不是普通属性,我很难理解为什么 ICommand.CanExecutes 总是包含以前的值而不是新值。
问题在下面描述,除了使用某种形式的“外观”模式之外,我真的无法找到解决此问题的方法,我在视图模型中创建属性并将它们挂钩到模型中的相应属性。
或者使用该死的 CommandManager.RequerySuggested 事件。这不是最佳的原因是因为视图显示了 30 多个命令,仅计算菜单,如果每次更改时所有 CanExecute 都更新,则所有菜单项/按钮都需要几秒钟才能更新。即使使用下面的示例,仅使用一个命令和按钮以及命令管理器,按钮也需要大约 500 毫秒来启用/禁用自身。
我能想到的唯一原因是在 CanExecute 被触发之前 CommandParameter 绑定没有更新,然后我想你无能为力。
提前致谢 :!
例如
假设我们有这个基本的视图模型
和这个模型
现在在我看来,我有这个文本框和按钮。
它有效,每次我在文本框中键入内容时都会调用 CanExecute,但参数始终设置为先前的值。假设我在文本框中写了“H”,CanExecute 被触发,参数设置为 NULL。接下来我写“E”,现在文本框包含“HE”,CanExecute 再次触发。这次仅将参数设置为“H”。
出于某种奇怪的原因,该参数始终设置为以前的值,当我检查 Project.Text 时,它设置为“HE”,但参数仍设置为仅“H”。
如果我现在将命令参数更改为
和 Textbox.Text 到
一切正常。CanExecute 参数始终包含最新值而不是先前值。
wpf - WPF:CanExecute 始终被禁用
我有一个文本框供用户输入字符串,还有一个“添加”按钮可以使用该值执行一些任务。我向 DelegateCommand 添加了一个 CanExecute 方法,以便该按钮仅在框中有文本时才起作用。
然而,它一直被禁用——即使条件为真。在框中键入不会启用按钮。
我以前发生过这种情况(并不总是使用相同类型的控件),通常我只会删除 CanExecute 并将其更改为操作方法中的“if”检查。不过,这一次,我实际上必须让它工作并以“正确”的方式将按钮变灰。
任何见解将不胜感激。提前致谢。
更新:
我已将 RaiseCanExecuteChanged 添加到 BuildEntryText 属性的设置部分。现在按钮开始禁用并在第一次输入文本时启用。但是,即使在删除文本或通过添加功能清除框后,它仍保持启用状态。
c# - RaiseCanExecuteChanged 在编译的 exe 中不起作用,但在调试时起作用
我完全不知道是什么原因造成的。
背景:使用 Prism 框架
- 我有一个按钮绑定到
DelegateCommand
- 我打电话
RaiseCanExecuteChanged
当我在 Visual Studio 中以调试模式启动应用程序时,一切正常。该应用程序运行完美。
然后当我通过 .exe 打开应用程序时,RaiseCanExecuteChanged
没有调用该方法。我不知道为什么会这样。还有其他人遇到类似的问题吗?
编辑:当我第一次通过 .exe 打开应用程序时,RaiseCanExecuteChanged
会调用它(因为我在 my 的构造函数中设置了它ViewModel
)。但是,它再也不会被调用。
需要时的代码:
我什至绝望了,并试图IsEnabled
在我的 Button 中放置一个属性,但我必须CanExecuteButton
……但无济于事。
wpf - 如何使用 Prism 6 正确制作 CanExecute 触发器
我有一个模型
然后我的 ViewModel 有两个版本
这是我的观点
Version1 工作正常,当绑定到 Name (TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}") 的 TextBox 为空或为空时,保存按钮将禁用。
但在版本 2 中,保存按钮不会禁用。它只在初始化时调用 CanExecute 方法,删除 TextBox 中的文本不会禁用 Button。我做错了什么?
c# - 为什么 Prism DelegateCommands 有时会导致线程异常?
下面的示例使用 Prism 6.1 中的 DelegateCommand,但我在 5.0 中产生了相同的问题。
使用以下视图模型(视图省略,仅包含 2 个按钮):
如果先调用 ActiveCommand,则会发生此异常:
WindowsBase.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理
附加信息:调用线程无法访问此对象,因为不同的线程拥有它。
据我所知,这是标准的“如果您不在 UI 线程上,则不允许您与 Wpf 控件交谈”例外。这似乎与方法摘要不一致:
在 UI 线程上引发 Prism.Commands.DelegateCommandBase.CanExecuteChanged,以便每个命令调用者都可以重新查询以检查命令是否可以执行。
此外,我过去从非 UI 线程调用此方法也没有问题。
更奇怪的是,如果首先引发 TestCommand,那么 ActionCommand 开始正常工作。我已经检查过了,Task.Run 块中的代码在所有情况下都在非 UI 线程上运行。
不幸的是,我不能在我的真实代码中使用它作为解决方法——我尝试在工作线程执行之前让 UI 线程调用 RaiseCanExecuteChanged,但它没有帮助。
RaiseCanExecuteChanged 有什么理由这样做吗?任何修复或解决方法?
wpf - WPF PRISM 6 DelegateComand ObservesCanExecute
提前致谢!
我应该如何在 PRISM 6 的 DelegateCommand 中使用 ObservesCanExecute?
不幸的是,我不熟悉 c# 中的表达式。另外,我认为这对其他人会有所帮助。
mvvm - 属性更改时未执行委托命令
我目前正在尝试使 ViewA 中的滑块更改 viewA 和 viewB 中文本的字体大小。我已经正确绑定了所有内容,但是当字体大小属性更改时,委托命令没有调用执行方法。如果我手动调用这个函数,一切都会按预期工作,所以很可能是一行代码出现了问题。ViewAViewModel 如下: