问题标签 [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.

0 投票
3 回答
232 浏览

wpf - 重用用户控件中的控件

我在 UserControl1 中有一个 UserControl UserControl1 和一个按钮。我有一个 UserControl1ViewModel,它有一个按钮的 ICommand 属性。使用此命令,我需要在 VM 外部(从其他 VM 或 MainWindow 的 VM)调用方法。对此的最佳做法是什么?

0 投票
3 回答
3013 浏览

c# - 来自 ItemsControl 项的 RelayCommand 发件人

我一直在使用 MVVM 的 RelayCommand 成功地将操作绑定到 XAML,但是我的 ItemsControl 有一个小问题。

在我的视图模型中:

如何在我的视图模型中定义我的 SelectDeviceCommand 以接收绑定到该项目的对象?

我的 SelectDeviceCommand 甚至没有被调用......(但我猜是因为我需要将我的设备设为迷你视图模型并在其中实现 SelectDeviceCommand,对吗?)

0 投票
1 回答
1137 浏览

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。

0 投票
3 回答
17358 浏览

.net - 将事件参数和发送者传递给 RelayCommand

使用 RelayCommand 时如何获取事件发送者?

0 投票
1 回答
6405 浏览

wpf - 对 MVVM 命令的“可以执行”状态进行编程重新评估

我正在使用 MVVM 模式编写 WPF 应用程序,基于以下文章:具有模型-视图-视图模型设计模式的 WPF 应用程序

我的视图上有两个按钮,按钮的“Command”属性绑定(带有数据绑定)到 RelayCommand 类的给定实例(请参见上面文章中的“图 3 RelayCommand 类”)。RelayCommand 类支持检查给定命令是否可以执行。

WPF 会自动禁用无法执行命令的按钮。

我的每个命令(在 ViewModel 类中)都会启动一个后台操作,并且在后台操作完成之前无法再次执行该命令。RelayCommand 实例具有后台操作是否仍在工作或已完成的信息。

我的问题如下:按下任何按钮后,按钮会自动禁用(这没关系),因为后台操作开始并且命令在完成之前无法执行,但是在操作完成后,按钮不会'不会自动启用,因为他们的命令的“可以执行”谓词不会自动重新评估。重新评估可以通过让应用程序松动并重新获得焦点(通过按 ALT+TAB)来手动触发。完成此技巧后,按钮再次启用。

如何以编程方式重新评估按钮命令的“可以执行”状态?

0 投票
1 回答
2464 浏览

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<>。

我到底在这里想念什么?

0 投票
6 回答
18556 浏览

c# - 简化 WPF MVVM 视图模型中的 RelayCommand/DelegateCommand

如果您正在执行 MVVM 并使用命令,您会经常在 ViewModel 上看到由私有 RelayCommand 或 DelegateCommand 字段支持的 ICommand 属性,例如MSDN上原始 MVVM 文章中的示例:

然而,这很混乱,并且使设置新命令相当乏味(我与一些对所有这些输入都犹豫不决的资深 WinForms 开发人员一起工作)。所以我想简化它并挖掘一点。我在 get{} 块的第一行设置了一个断点,发现它只在我的应用程序第一次加载时才被命中——我以后可以根据需要触发任意数量的命令,而这个断点永远不会被命中——所以我想要简化它以消除我的 ViewModel 中的一些混乱,并注意到以下代码的工作方式相同:

但是,我对 C# 或垃圾收集器知之甚少,不知道这是否会导致问题,例如在某些情况下会产生过多的垃圾。这会带来什么问题吗?

0 投票
1 回答
207 浏览

.net-3.5 - 执行 RelayCommand,或传递一个动作,当方法来自接口时表现不同?

我认为这是我在这里发言的整体 .NET 经验不足,但我无法弄清楚为什么会发生这种情况。

我的 ModelImportMany是一个名为 ISystemSetupEditor 的接口,在这种情况下,我有几个Export该接口的部分。

在应用程序的 ViewModel 中,我有一个方法可以创建一个菜单,并遍历IEnumerable<ISystemSetupEditor>以填充菜单项,如下所示:

问题是,当我单击任何菜单项时,总是会调用最后枚举的 ISystemSetupEditor 派生对象的 ShowTool()。就好像每个 RelayCommand 都存储了相同的引用。

我希望有人可以:

  • 解释为什么会发生这种情况,或者至少给我一个关键字,这样我就可以自己查找并弄清楚
  • 提出可能的解决方案——到目前为止,我唯一想出的是管理一个单独的字典,其中 T,U 将能够解析到正确的库,以便以后可以调用正确的函数。
0 投票
3 回答
603 浏览

wpf - 将 IsDirty 与 ICommand 一起使用

我正在尝试在对象编辑期间使用 IsDirty 标志来控制 CanExecute 和 Navigational 控件。

问题是,为了使它工作,我认为我必须对我的 IsDirty 方法使用 onPropertyChanged,以便我的控件获得更改通知。(我希望在我的对象 IsDirty 时禁用某些控件)不幸的是,我得到了一个讨厌的堆栈溢出,因为它螺旋进入一个可怕的 IsDirty 循环......呵呵......

有没有人能够得到类似的东西来工作?我所做的只是在我的 OnPropertyChanged 方法中将 IsDirty 设置为 true。然后在我的 canExecute 方法中,我查看它是否设置为 true,但是在我的控件上,我需要将数据绑定到它……这导致了所有问题。

有谁知道如何实现这样的事情?

这是我的解决方案

:: 在 ViewModelBase 中

::在派生自 ViewModelBase 的 EditViewModelBase 中。

:: 在我的视图模型中

0 投票
1 回答
1848 浏览

mvvm - 为什么这个 lambda 表达式中有 param?

Josh Smith 关于 MVVM的MSDN 杂志文章包含一个我不完全理解的 lambda 表达式。这段代码中param的目的是什么?

翻译成我的首选语言 VB 它是:

如果在 CanSave 或 Save 中使用它,我本来希望只看到param 。我对 lambda 表达式有点陌生。据我所知,看到一个既没有声明也没有在任何地方使用的变量对我来说很奇怪。任何解释将不胜感激。

为了把它放在上下文中,RelayCommand (C#) 的构造函数是:

在 VB 中: