问题标签 [relaycommand]
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 - MVVM 中继命令不会在 Silverlight RIA 应用程序中触发
我正在开发 Silverlight 4 RIA(实体框架)应用程序,但在使用 MVVMLight RelayCommand 时遇到问题。我之前使用过它们没有问题,但是在我实现 ViewModelLocator 模式之后似乎出现了问题。
按钮控件上的绑定不会产生任何问题,并且应用程序会运行,但按钮单击不会触发 RelayCommand。
当我尝试在 Blend 中绑定 RelayCommand 时,它看不到 SelectionCommand 属性,但它可以看到其他属性,例如 IsBusy。
知道我做错了什么吗?
c# - RelayCommand RaiseCanExecuteChanged() 失败
我正在使用几个绑定到使用 CanExecute 委托初始化的 RelayCommands 的按钮。
BoolProp1
并且BoolProp2
是 setter 正确 raise 的常规属性PropertyChanged
,但众所周知,这不足以让 SL 重新评估CanExecute
命令。这就是为什么我也叫Delete.RaiseCanExecuteChanged()
两个二传手。
所有这些都可以正常工作(按钮被禁用和正确启用)直到某个时候,所有这些都停止了。那时,调用Delete.RaiseCanExecuteChanged()
不再触发我的断点CanDelete()
,按钮永远保持原样。
我花了 2 个小时试图找出没有效果的确切原因。我怀疑RaiseCanExecuteChanged()
在单个“绑定迭代”期间多次调用会以某种方式破坏机制。
有什么提示吗?我已经在考虑使用通过...IsExecutable
刷新的附加字段INotifyPropertyChanged
更新
RelayCommand
实际上GalaSoft.MvvmLight.Command.RelayCommand
来自MVVM Light Toolkit。ILSpy 展示了一个非常简单的 ICommand 实现:
对传递给构造函数的值设置一次_canExecute
。Func<bool>
我仍在努力尽量减少重现该问题。
更新
看我的回答。
c# - 为什么我的 ContextMenu 项绑定到 RelayCommand 总是被禁用?
我现在正在开发我的第一个大型 WPF MVVM 应用程序,它使用 MVVM Light Toolkit 和 Josh Smith 的 RelayCommand。我遇到的问题是我将此命令绑定到 ContextMenu 中的一个项目,该项目一直处于禁用状态。
这是 MenuItem 的代码片段:
现在我对命令绑定所做的如下:我使用了一个名为 CommandReference 的类,我在这里找到了它。
这是命令引用本身:
我这样做的原因是因为我注意到 ContextMenu 上的命令绑定问题(由于 ContextMenu 不是逻辑/可视树的一部分)。我在网上找到了几个关于这个主题的主题,其中一些我发现了 CommandReference 类,这似乎是我的问题的一个很好的解决方案。这些命令绑定问题确实消失了,但似乎无法识别我的命令的 CanExecute 或由于 MenuItem 保持禁用状态。
在 ViewModel(作为其 DataContext 绑定到视图)中,我有以下命令代码:
我在这里缺少什么来使我的代码正常工作?我认为这可能与我正在使用的 CommandReference 有关,但我不知道要查找什么。
真心希望大家帮忙!
wpf - How or when to cleanup RelayCommand objects in WPF/MVVM?
I am using the standard Josh Smith implementation of RelayCommand to implement ICommands in my WPF/MVVM application. See: WPF Apps with the MVVM Design Pattern
A few of my CanExecute methods take a long time to run. Individually, they aren't bad (a fraction of a second each). But I have noticed that the more commands that I bind to my UI, the slower the application responds (delays exceeding 10 seconds - yuck).
I believe it is because the RelayCommand CanExecuteChanged is hooking onto the CommandManager.RequerySuggested event and my ViewModel template calls CommandManager.InvalidateRequerySuggested() as part of the IDataErrorInfo validation.
My ViewModels implement IDisposable, so I have tried to take advantage of the OnDispose method to clean up my RelayCommands, but the ICommand.CanExecute methods continue to be called even after my VM is disposed of.
That leads me to conclude that something (the CommandManager?, the View?) is holding a reference to the RelayCommand.
Does anyone have a good pattern for releasing and disposing of RelayCommands to prevent them from being requeried after their desired lifetime has expired?
Is there a better way to manage when CanExecute should be called?
wpf - CanExecuteCommand 对性能有影响吗?
使用 ICommand 对象的 CanExecuteCommand 对性能有何影响。该方法是否一遍又一遍地执行?
我需要遍历大约 200 个对象的集合,根据这些对象决定是否应该启用绑定到命令的按钮?CanExecuteCommand 是否会重复执行,这会使我的应用程序变慢
wpf - 为什么要使用 RelayCommand 或 DelegateCommand 而不是仅仅实现 ICommand?
我只是在 WPF 中学习 MVVM,我对 WPF 和 MVVM 都是全新的(我了解它的工作原理,但从未使用过它......)
我在网上找到的每篇教程/文章都使用 RelayCommand 或 DelegateCommand。
在我看来,这些模式迫使 VM 违反 SRP 原则,因为它将在其中保存命令逻辑。
为什么不直接使用 ICommand 接口的自定义实现?像这样:
想象一下,您正在显示一个人并将其保存到数据库:
我的 Xaml 将是这样的:
这是我的虚拟机:
这是我的命令:
我的方法有什么问题?
c# - WPF 如何使用 CommandManager (CommandManager.InvalidateRequerySuggested) 确定何时失效?
我一直在这里和那里使用RelayCommand,这让我想知道并想知道... CommandManager.InvalidateRequerySuggested()
WPF 何时调用该函数?
我的猜测是每次触发 UI 上的任何其他路由事件时,这在 MVVM 世界中主要意味着当引发 OnPropertyChanged 事件时,导致值发生变化,从而导致一些相关的 routedevent 执行。但是,这只是一个猜测,我想知道是否有人知道这里的确切内部工作原理。
c# - 为什么我的 CommandParameter 有时(但不总是)为空,尽管在标记中声明了?
我的代码大致如下:
在用作 DataContext 的视图模型中:
首次显示时MenuItem
,输出为:
当我单击MenuItem
“EnumValue”时再打印 3 次,然后我得到一个NullReferenceException
就行var enumValue = (SomeEnum)commandParameter
(commandParameter
为空)。
我一辈子都想不出一个为什么CommandParameter
会正确的原因,前几次CanExecute
被称为,但null
另一次。这里发生了什么?
silverlight - 使用中继命令控制模板事件
我在另一个控制模板中的控制模板中触发事件并使用 MVVM 光继电器命令时遇到问题。
情况如下: main_control 以 generic.xaml 样式模板化。sub_control 的模板化方式相同。
main_control 在 ObservableCollection 中有几个 sub_control 实例
现在在我用 MVVM Light 实现的 SL 项目中,我在 xaml 中有一个带有 main_control 的视图。此视图绑定到一个视图模型,并用 sub_control 填充它。
我想要实现的是在视图模型中返回单击的 sub_control 实例。
谢谢你的帮助。
wpf - 对象发送者在 RelayCommand 中始终为空
我正在使用 RelayCommand 来处理按钮单击,我需要获取 sender 参数但它始终为空,知道为什么吗?
视图模型.cs
查看.xaml
我需要在 ExpandClickCommand 中获取当前 ListboxItem 的索引