如何在wpf中使用RelayCommand?

Sau*_*ron 40 c# wpf relaycommand

我如何使用 RelayCommandin wpf?

Mar*_*ris 51

WPF中不存在中继命令,它只是在本MSDN文章中定义后突出显示的外部类.如果要使用它,您需要自己编写.

否则,你可以在你从WPF工具的委托指令在这里其中有超过RelayCommand代码额外的功能一点点.


啊,当我输入这个答案时问题发生了变化.假设您正在使用上面定义的RelayCommand,您需要为它提供一个或两个委托,一个返回bool,用于确定命令是否处于有效状态以运行,第二个返回什么并且实际运行命令.如果您不提供"CanRun"委托,则该命令将认为它始终处于有效状态.文章中使用的代码:

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

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

  • 我希望MSDN的文章代码样本并非全都混杂在一起,就像几个月一样,任何人都知道镜子或显示正常的东西? (3认同)

Lui*_*rez 7

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

  • 看起来很不错,虽然没有测试它.但我建议你改进博客文章并解释实现细节.虽然将代码发布到Github会非常好.并且还考虑在StackOverflow上为此答案添加更多(一些!)代码. (2认同)