带参数的RelayCommand

时间:2015-06-26 12:00:05

标签: c# windows-runtime winrt-xaml mvvm-light

我有一个返回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属性。

编辑:刚检查了我的旧代码,完全相同的版本适用于Windows 8,但我的项目现在是Windows 8.1。

1 个答案:

答案 0 :(得分:0)

尝试将这些参数(在View中)绑定到ViewModel的属性 - 我假设参数来自View的某些UI元素(例如搜索TextBox或过滤器类型ComboBox)。然后,您将能够在CreateSectionCommand中使用它们。

但如果你不能使用View中的绑定,请试试这个:

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();
    });
}