将 MVVM-Light RelayCommand<T> 关联到按钮中断 CanExecute 时添加 CommandParameter

Adding CommandParameter when associating MVVM-Light RelayCommand<T> to button breaks CanExecute

我不确定这是一个 MVVM-Light 错误还是在 WPF 中不起作用...我有一个按钮,我可以在其中将命令 属性 设置为 RelayCommand。只要我不设置 CommandParameter 属性,一切正常。一旦我这样做,CanExecute 回调就会停止工作。

我正在使用 GalaSoft.MvvmLight.CommandWpf 命名空间,因为我在 .Net 4.5.2 中工作。这是一个代码片段:

    public RelayCommand<IList> SetFlagCommand { get; private set; }
    ...
    SetFlagCommand = new RelayCommand<IList>(SetFlag, CanSetFlag);
    ...
     mButtons.Add(new Button
        {
            ...
            Command = SetFlagCommand,
            CommandParameter = new Binding("SelectedItems") { ElementName = "lstAllChoices" },
            });

    ...
    private void SetFlag(IList list)...
    private bool CanSetFlag(IList list)...

CanSetFlag 方法被调用一次,但之后再也不会。如果我不设置 CommandParameter 属性,它会按预期工作。有什么想法吗?

感谢您的帮助!

您不应该将 CommandParameter 属性 设置为 Binding。改为使用 BindingOperations.SetBinding 方法绑定它:

Button button = new Button()
{
    Command = SetFlagCommand
};
BindingOperations.SetBinding(button, Button.CommandParameterProperty, new Binding("SelectedItems") { ElementName = "lstAllChoices" });

mButtons.Add(btn);

还要确保源 属性 (SelectedItems) 的类型与 RelayCommand<T>.

的类型参数 T 匹配