将 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
匹配
我不确定这是一个 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
匹配