带有参数的RelayCommand
本文关键字:RelayCommand 参数 | 更新日期: 2023-09-27 17:59:49
我有一个函数,它返回一个ICommand(确切地说是RelayCommand),我需要向这个函数传递一些参数。这是代码:
private ICommand CreateSectionCommand(FilterEnum filterEnum, string title = null, string searchKey = "")
{
return new RelayCommand(() =>
{
NavigationService.Build<SearchPageViewModel>()
.WithParam("criteria", new Criteria
{
Query = searchKey,
SearchFilter = filterEnum,
Title = title
})
.Navigate();
});
}
当我初始化命令时,一切都很好,但当我单击导航按钮时,它什么也不做。很可能,问题是所有参数都为null,因为RelayCommand是在不同的初始化时间调用的。
如何解决此问题并传递正确的参数?我不能简单地绑定XAML中的CommandParameter属性。
编辑:刚刚检查了我的旧代码,完全相同的版本在Windows8上运行,但我的项目现在是Windows8.1。
尝试将这些参数(在View中)绑定到您的ViewModel的属性-我假设参数来自您的View的一些UI元素(例如搜索TextBox或过滤器类型ComboBox)。然后,您将能够在CreateSectionCommand中使用它们。
但是,如果你不能使用绑定从视图试试这个:
private Criteria commandCriteria;
private ICommand CreateSectionCommand(FilterEnum filterEnum, string title = null, string searchKey = "")
{
commandCriteria = new Criteria
{
Query = searchKey,
SearchFilter = filterEnum,
Title = title
};
return new RelayCommand(() =>
{
NavigationService.Build<SearchPageViewModel>()
.WithParam("criteria",commandCriteria )
.Navigate();
});
}