40

如何 RelayCommand在 wpf 中使用?

4

2 回答 2

53

中继命令在 WPF 中不存在,它只是一个外部类,在此 MSDN 文章中定义后引起了人们的注意。如果你想使用它,你需要自己编写它。

否则,您可以在此处使用 WPF 工具包中的 Delegate 命令,它比 RelayCommand 代码具有一些额外的功能。


啊,当我输入这个答案时,问题发生了变化。假设您使用的是上面定义的 RelayCommand,您需要为它提供一个或两个委托,一个返回一个 bool 来确定命令是否处于要运行的有效状态,另一个不返回任何内容并实际运行命令。如果您不提供“CanRun”委托,那么该命令将认为它始终处于有效状态。文章中使用的代码:

RelayCommand _saveCommand;
public ICommand SaveCommand
{
    get
    {
        if (_saveCommand == null)
        {
            _saveCommand = new RelayCommand(param => this.Save(),
                param => this.CanSave );
        }
        return _saveCommand;
    }
}

声明一个 RelayCommand,它将在触发时调用 Save() 方法并返回 CanSave 属性作为有效性测试。当此命令绑定到 WPF 中的按钮时,Button 的 IsEnabled 属性将匹配 ViewModel 的 CanSave 属性,并且当单击按钮时(假设它已启用),将在 ViewModel 上调用 Save() 方法。

于 2009-05-14T10:20:26.397 回答
7

作为RelayCommand为所有方法创建包装器的替代方法,我可以建议一个免费的库和源代码,以允许您使用绑定{BindTo Save()}。我创建它是为了简化我的绑定。它还使相对绑定更容易。你可以在这里找到它:http ://www.simplygoodcode.com/2012/08/simpler-wpf-binding.html

于 2012-08-06T18:00:08.317 回答