问题标签 [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.
wpf - 重用用户控件中的控件
我在 UserControl1 中有一个 UserControl UserControl1 和一个按钮。我有一个 UserControl1ViewModel,它有一个按钮的 ICommand 属性。使用此命令,我需要在 VM 外部(从其他 VM 或 MainWindow 的 VM)调用方法。对此的最佳做法是什么?
c# - 来自 ItemsControl 项的 RelayCommand 发件人
我一直在使用 MVVM 的 RelayCommand 成功地将操作绑定到 XAML,但是我的 ItemsControl 有一个小问题。
在我的视图模型中:
如何在我的视图模型中定义我的 SelectDeviceCommand 以接收绑定到该项目的对象?
我的 SelectDeviceCommand 甚至没有被调用......(但我猜是因为我需要将我的设备设为迷你视图模型并在其中实现 SelectDeviceCommand,对吗?)
c# - 如何通过 EventToCommand 将 LayoutRoot 发送到 RelayCommand?
带有触发器的网格示例:
在我的 ViewModel 中,我将 LoadedCommand 设置为:
在 ViewModel 初始化程序中,我有这个:
然后,在我的 DoLoaded 中,我试图这样做:
您可以看到我正在尝试在我的视图中摆脱我的 Grid 中的 Loaded="",并改为执行 RelayCommand。问题是 OriginalSource 什么也没带回来。我加载的事件以这种方式运行良好,但我似乎需要通过 RoutedEventArgs 获取网格。
我尝试使用 CommandParameter="{Binding ElementName=LayoutRoot}" 在 EventCommand 中传递网格,但这只会在按下 F5 并运行项目时使 VS2010 崩溃。
有任何想法吗?或者更好的方法来做到这一点?我让 Loaded 事件在视图 C# 中运行,然后在视图代码隐藏中调用 ViewModel,但我想做一个更好的绑定。与 Views 代码隐藏中的 ViewMode 对话感觉就像是 hack。
.net - 将事件参数和发送者传递给 RelayCommand
使用 RelayCommand 时如何获取事件发送者?
wpf - 对 MVVM 命令的“可以执行”状态进行编程重新评估
我正在使用 MVVM 模式编写 WPF 应用程序,基于以下文章:具有模型-视图-视图模型设计模式的 WPF 应用程序
我的视图上有两个按钮,按钮的“Command”属性绑定(带有数据绑定)到 RelayCommand 类的给定实例(请参见上面文章中的“图 3 RelayCommand 类”)。RelayCommand 类支持检查给定命令是否可以执行。
WPF 会自动禁用无法执行命令的按钮。
我的每个命令(在 ViewModel 类中)都会启动一个后台操作,并且在后台操作完成之前无法再次执行该命令。RelayCommand 实例具有后台操作是否仍在工作或已完成的信息。
我的问题如下:按下任何按钮后,按钮会自动禁用(这没关系),因为后台操作开始并且命令在完成之前无法执行,但是在操作完成后,按钮不会'不会自动启用,因为他们的命令的“可以执行”谓词不会自动重新评估。重新评估可以通过让应用程序松动并重新获得焦点(通过按 ALT+TAB)来手动触发。完成此技巧后,按钮再次启用。
如何以编程方式重新评估按钮命令的“可以执行”状态?
wpf - 无法将单个参数传递给 MVVM Light Toolkit 的 RelayCommand 中的 lambda 函数
我不知道 Josh Smith 和 Laurent Bugnion 的 RelayCommand 实现之间是否有区别,但是我看过的任何地方,听起来 RelayCommand 的 Execute 部分可以采用 0 或 1 个参数。我只能让它与 0 一起工作。当我尝试类似的东西时:
我得到错误:Delegate 'System.Action' does not take '1' arguments
。只是为了确保我没有发疯,我查看了 RelayCommand 的定义,以确保我的解决方案中没有某些流氓实现,但可以肯定的是,它只是 Action,而不是 Action<>。
我到底在这里想念什么?
c# - 简化 WPF MVVM 视图模型中的 RelayCommand/DelegateCommand
如果您正在执行 MVVM 并使用命令,您会经常在 ViewModel 上看到由私有 RelayCommand 或 DelegateCommand 字段支持的 ICommand 属性,例如MSDN上原始 MVVM 文章中的示例:
然而,这很混乱,并且使设置新命令相当乏味(我与一些对所有这些输入都犹豫不决的资深 WinForms 开发人员一起工作)。所以我想简化它并挖掘一点。我在 get{} 块的第一行设置了一个断点,发现它只在我的应用程序第一次加载时才被命中——我以后可以根据需要触发任意数量的命令,而这个断点永远不会被命中——所以我想要简化它以消除我的 ViewModel 中的一些混乱,并注意到以下代码的工作方式相同:
但是,我对 C# 或垃圾收集器知之甚少,不知道这是否会导致问题,例如在某些情况下会产生过多的垃圾。这会带来什么问题吗?
.net-3.5 - 执行 RelayCommand,或传递一个动作,当方法来自接口时表现不同?
我认为这是我在这里发言的整体 .NET 经验不足,但我无法弄清楚为什么会发生这种情况。
我的 ModelImportMany
是一个名为 ISystemSetupEditor 的接口,在这种情况下,我有几个Export
该接口的部分。
在应用程序的 ViewModel 中,我有一个方法可以创建一个菜单,并遍历IEnumerable<ISystemSetupEditor>
以填充菜单项,如下所示:
问题是,当我单击任何菜单项时,总是会调用最后枚举的 ISystemSetupEditor 派生对象的 ShowTool()。就好像每个 RelayCommand 都存储了相同的引用。
我希望有人可以:
- 解释为什么会发生这种情况,或者至少给我一个关键字,这样我就可以自己查找并弄清楚
- 提出可能的解决方案——到目前为止,我唯一想出的是管理一个单独的字典,其中 T,U 将能够解析到正确的库,以便以后可以调用正确的函数。
wpf - 将 IsDirty 与 ICommand 一起使用
我正在尝试在对象编辑期间使用 IsDirty 标志来控制 CanExecute 和 Navigational 控件。
问题是,为了使它工作,我认为我必须对我的 IsDirty 方法使用 onPropertyChanged,以便我的控件获得更改通知。(我希望在我的对象 IsDirty 时禁用某些控件)不幸的是,我得到了一个讨厌的堆栈溢出,因为它螺旋进入一个可怕的 IsDirty 循环......呵呵......
有没有人能够得到类似的东西来工作?我所做的只是在我的 OnPropertyChanged 方法中将 IsDirty 设置为 true。然后在我的 canExecute 方法中,我查看它是否设置为 true,但是在我的控件上,我需要将数据绑定到它……这导致了所有问题。
有谁知道如何实现这样的事情?
这是我的解决方案
:: 在 ViewModelBase 中
::在派生自 ViewModelBase 的 EditViewModelBase 中。
:: 在我的视图模型中
mvvm - 为什么这个 lambda 表达式中有 param?
Josh Smith 关于 MVVM的MSDN 杂志文章包含一个我不完全理解的 lambda 表达式。这段代码中param的目的是什么?
翻译成我的首选语言 VB 它是:
如果在 CanSave 或 Save 中使用它,我本来希望只看到param 。我对 lambda 表达式有点陌生。据我所知,看到一个既没有声明也没有在任何地方使用的变量对我来说很奇怪。任何解释将不胜感激。
为了把它放在上下文中,RelayCommand (C#) 的构造函数是:
在 VB 中: