带有参数的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。

带有参数的RelayCommand

尝试将这些参数(在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();
    });
}