问题标签 [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.
c# - 如何在 WPF 中使用 DelegateCommand 从列表中填充 ListBox?
我在尝试填充我的 ListBox 时遇到了问题。我的 xaml 文件中有一个按钮:
我也有一个列表框:
在我的 ViewModel 中,我有:
和
当我按下按钮时,会发生这种情况(也在 ViewModel 中):
我希望在 ListBox 中看到的内容:“1”和“2”。我看到的是:只有“1”
我不知道有什么问题。另外,如果我将代码更改为:
我看到了我希望在 ListBox 中看到的内容:“1”、“2”和“Test1”。
如果我只想列出“1”和“2”怎么办?
我的 DelegateCommand 类:
谢谢。
wpf - WPF ICommand 等效于 Click -= Button_Click
对于 WPF ICommand,事件处理程序 -= 的等价物是什么?
我们有一个用户控制按钮,用于管理提交购买请求的功能,但需要用户先在工作站上注册。
WinForms 的用法是:
WPF 中的现代化版本具有单个 ICommand 属性和典型声明。
一旦用户注册,用户控件将重新初始化到提交过程。存在一个简单的触发器来检查按钮的状态。从视觉上看,触发器工作得很好,这表明程序正在处理初始化代码块。
初始化代码块
调试模式清楚地显示 ClickCommand 执行方法是 SubmitClicked,但是 RegisterClicked 事件仍然会触发。这仅在注册过程首先发生时发生,因为用户之前没有登录工作站。
复制 EventHandler -= 行为需要什么,因为设置 ClickCommand = null 没有帮助?
更新
到目前为止,我的应用程序中的 ICommand 用法一直是单次使用。正如安迪的回答所说,它应该被视为一个属性并引发属性更改事件。
正如我多次为属性所做的那样,更新后的 ICommand 声明是所有需要更改的。
c# - 在 Xamarin 表单中使用异步函数委托命令
在 Xamarin 表单中,我们有这样的委托命令:
在构造函数中初始化如下:
目前,ExecuteLogoutCommand是返回void类型,但我希望将其设为Task,因为它有一个异步任务。但是这样做会破坏构造函数中的初始化。这里有什么帮助吗?
更新 以下链接帮助了我:https ://johnthiriet.com/mvvm-going-async-with-async-command/
但是现在我在单元测试中遇到了这个错误:
c# - Prism DelegateCommand 未在 SelectionChanged 上触发
我有以下委托命令:
视图模型
使用 Prism.Mvvm; 使用 System.Collections.ObjectModel;
命名空间 Photography.ViewModels { 公共类 ApertureDataGridViewModel : BaseViewModel {
看法
调用窗口视图
我在应用程序的不同部分使用了完全相同的代码。谁能确定我做错了什么?
c# - 将三个参数传递给 Prism DelegateCommand 以在不同的按钮命令上使用相同的命令 [MVVM 模式]
我有以下使用 Prism 库创建的 DelegateCommand。
我已经绑定MyButtonClickCommand
到 XAML 文件中的按钮。
但我想对另外两个按钮使用相同MyButtonClickCommand
的按钮,而不是创建两个额外的 DelegateCommands MyButtonClickCommand1
& MyButtonClickCommand2
。
所以我想要添加string1
和integer_number1
作为参数,并在不同的按钮上调用相同的 ICommand,如下所示
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?
非常感谢,非常感谢任何指导以纠正我的想法!
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。
那么,问题是为什么命令处理程序没有按预期更新用户界面?
c# - 当集合为零时,可以在棱镜委托中执行不按预期更新可见性
在我的应用程序中,我有一个 DelegateCommand 定义如下
这工作得很好,直到 List AllItemsSelected 为空为止。当我调试代码时,我仍然可以看到从 CanExceuteSelectAll 方法成功返回的错误,但按钮的可见性没有改变并且它是可见的。它仍然可以点击,但没有任何反应,甚至没有到达 ExceuteSelectAll 方法。
请注意,我只包含了一个委托命令,但 AllItemsSelected 也可以通过其他一些方法进行更改
知道我可能会错过什么吗?