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

0 投票
1 回答
115 浏览

c# - 如何在 WPF 中使用 DelegateCommand 从列表中填充 ListBox?

我在尝试填充我的 ListBox 时遇到了问题。我的 xaml 文件中有一个按钮:

我也有一个列表框:

在我的 ViewModel 中,我有:

当我按下按钮时,会发生这种情况(也在 ViewModel 中):

我希望在 ListBox 中看到的内容:“1”和“2”。我看到的是:只有“1”

我不知道有什么问题。另外,如果我将代码更改为:

我看到了我希望在 ListBox 中看到的内容:“1”、“2”和“Test1”。

如果我只想列出“1”和“2”怎么办?

我的 DelegateCommand 类:

谢谢。

0 投票
2 回答
78 浏览

wpf - WPF ICommand 等效于 Click -= Button_Click

对于 WPF ICommand,事件处理程序 -= 的等价物是什么?

我们有一个用户控制按钮,用于管理提交购买请求的功能,但需要用户先在工作站上注册。

WinForms 的用法是:

WPF 中的现代化版本具有单个 ICommand 属性和典型声明。

一旦用户注册,用户控件将重新初始化到提交过程。存在一个简单的触发器来检查按钮的状态。从视觉上看,触发器工作得很好,这表明程序正在处理初始化代码块。

初始化代码块

调试模式清楚地显示 ClickCommand 执行方法是 SubmitClicked,但是 RegisterClicked 事件仍然会触发。这仅在注册过程首先发生时发生,因为用户之前没有登录工作站。

复制 EventHandler -= 行为需要什么,因为设置 ClickCommand = null 没有帮助?

更新

到目前为止,我的应用程序中的 ICommand 用法一直是单次使用。正如安迪的回答所说,它应该被视为一个属性并引发属性更改事件。

正如我多次为属性所做的那样,更新后的 ICommand 声明是所有需要更改的。

0 投票
0 回答
151 浏览

c# - 在 Xamarin 表单中使用异步函数委托命令

在 Xamarin 表单中,我们有这样的委托命令:

在构造函数中初始化如下:

目前,ExecuteLogoutCommand是返回void类型,但我希望将其设为Task,因为它有一个异步任务。但是这样做会破坏构造函数中的初始化。这里有什么帮助吗?

更新 以下链接帮助了我:https ://johnthiriet.com/mvvm-going-async-with-async-command/

但是现在我在单元测试中遇到了这个错误:

0 投票
1 回答
130 浏览

c# - Prism DelegateCommand 未在 SelectionChanged 上触发

我有以下委托命令:

视图模型

使用 Prism.Mvvm; 使用 System.Collections.ObjectModel;

命名空间 Photography.ViewModels { 公共类 ApertureDataGridViewModel : BaseViewModel {

看法

调用窗口视图

我在应用程序的不同部分使用了完全相同的代码。谁能确定我做错了什么?

0 投票
2 回答
323 浏览

c# - 将三个参数传递给 Prism DelegateCommand 以在不同的按钮命令上使用相同的命令 [MVVM 模式]

我有以下使用 Prism 库创建的 DelegateCommand。

我已经绑定MyButtonClickCommand到 XAML 文件中的按钮。

但我想对另外两个按钮使用相同MyButtonClickCommand的按钮,而不是创建两个额外的 DelegateCommands MyButtonClickCommand1& MyButtonClickCommand2

所以我想要添加string1integer_number1作为参数,并在不同的按钮上调用相同的 ICommand,如下所示

0 投票
2 回答
125 浏览

c# - DelegateCommand RefreshCommand 刷新 ObservableCollection 绑定的 DataGrid

当我向数据库添加新行时,我正在尝试更新我的DataGrid(名称:dgLicenseholder,绑定到一个ObservableCollection。我正在使用)。MVVMLight为什么这不起作用?

在我的ViewModel中,我有一个public DelegateCommand RefreshCommand {get; private set; }和一个方法:

licenseHolders是一个 ObservableCollection 列表,如下所示:

LicenseHolders是 my 中的一个类Model,它保存数据:

在 XAML 中,我将命令绑定到一个按钮,如下所示;

我更新数据库的方法放置在 中ViewModel,并由包含DataGrid.

添加到数据库()

问题一:

我绑定我的方式有什么问题RefreshCommand?我添加到数据库的方法工作正常,但我必须重新打开窗口DataGrid才能“捕捉”更改。

问题2:

如何绑定用于更新数据库的方法而不将其放入单击事件中?

更新的代码(尝试实施用户 ChrisBD 建议的解决方案)

LicenseHolder.cs - 持有者类(模型)

RidelHubMainViewModel.cs (视图模型)

查看,代码隐藏 - 父窗口 (LicenseHoldersWindow)

视图,XAML - 父窗口 (LicenseHoldersWindow)

查看,代码隐藏子窗口 (NewLicenseHolder)

视图,XAML- 子窗口 (NewLicenseHolder)

好的,所以,如果你通读了所有这些:上帝保佑。如您所见,我在子表单中添加了新的行信息,单击保存,理想情况下,希望我的 DataGrid 然后自动更新(无需单击任何其他“刷新”或“更新”按钮。

现在发生的事情是,当我单击保存时,我收到一个错误: System.NullReferenceException: 'Object reference not set to an instance of an object.' Local1 was null.在我的AddToDB()-method 中,在if-else statement我检查没有一个文本框为空的地方。NewLicenseHolder class所以我引用内部的方式显然有问题ViewModel

NewLicenseHolder nlh = Application.Current.Window.OfType<NewLicenseHolder>().FirstOrDefault();

如何正确引用它,并确保在我离开子表单并返回父表单时更新 DataGrid?

非常感谢,非常感谢任何指导以纠正我的想法!

0 投票
1 回答
54 浏览

wpf - WPF:MVVM Microsoft.Expression.Interaction

我正在研究 MVVM ,我使用过交互。 XAML 绑定

目的是在文本框中输入的内容,相同的内容将显示在TextBlock.

交互触发将是PreviewTextInput文本框的完成事件。

但它给出了错误但没有按预期工作。

已附加运行时图像的绑定错误。

下面是代码。

XAML

MVVM

}

0 投票
0 回答
39 浏览

wpf - WPF Interaction.Behaviors/EventTrigger 如何更新 WPF 中的 UI?

我有一个带有自定义 UserControl 的 WPF 应用程序,我想通过使用 Microsoft.Xaml.Behaviors 库中的简单 EventTrigger 来响应鼠标事件。我还有一个画布,需要显示或隐藏,以反映我的 ViewModel 类中的 SelectedProperty 被更改。当单击鼠标右键时,我的编辑命令被提出并负责在我的 ViewModel 类上将 SelectedProperty 更新为 false。

这是我的委托命令类:

这是我的带有 ICommand 和 SelectedProperty 的 ViewModel 类:

这是使用编辑命令的用户控制代码。

还有另一个用户控件,使用该属性来隐藏和显示基于 SelectedProperty 状态的画布:

当我单击鼠标右键时,会执行 EditNodeHandler,并且参数是正确的 ViewModel 实例(选中 == true)。我还可以在 Visual Studio 中设置断点并中断处理程序代码。但是,当在处理程序中将 Selected 属性设置为 false 时,画布不会被隐藏。如果我使用 Snoop 调试器查看 DataContext,我可以手动将 SelectedProperty 设置为 false,并且用户界面会按预期隐藏 Canvas。

那么,问题是为什么命令处理程序没有按预期更新用户界面?

0 投票
0 回答
18 浏览

c# - 当集合为零时,可以在棱镜委托中执行不按预期更新可见性

在我的应用程序中,我有一个 DelegateCommand 定义如下

这工作得很好,直到 List AllItemsSelected 为空为止。当我调试代码时,我仍然可以看到从 CanExceuteSelectAll 方法成功返回的错误,但按钮的可见性没有改变并且它是可见的。它仍然可以点击,但没有任何反应,甚至没有到达 ExceuteSelectAll 方法。

请注意,我只包含了一个委托命令,但 AllItemsSelected 也可以通过其他一些方法进行更改

知道我可能会错过什么吗?