WPF命令绑定与返回布尔值的方法

时间:2018-11-30 12:44:46

标签: c# wpf xaml

我有两种方法几乎可以完成两件事:

    public static void ShowThing()
    {
        // code..
    }

    public static bool TryShowThing()
    {
        if(condition)
        {
            // same code above..
            return true;
        }
        return false;
    }

此刻,我将按钮的 Command 绑定到void方法,它可以完成它应做的事情。 问题在于,现在我正在清理代码并避免耦合,我想将按钮绑定到bool方法上,这将无法正常工作。

Command={Binding BooleandReturningMedhod}是否甚至可以在xaml中使用?

显然,互联网上从来没有人遇到过这个问题,所以我认为我在这里遗漏了一些东西...

1 个答案:

答案 0 :(得分:0)

您不能直接绑定到方法。

我认为您真正想要实现的是这样的事情

代码:

ShowThingCommand { get; } = new RelayCommand((o) => ShowThing(),(o) => condition)

RelayCommand:

public class RelayCommand : ICommand    
{    
    private Action<object> execute;    
    private Func<object, bool> canExecute;    

    public event EventHandler CanExecuteChanged    
    {    
        add { CommandManager.RequerySuggested += value; }    
        remove { CommandManager.RequerySuggested -= value; }    
    }    

    public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)    
    {    
        this.execute = execute;    
        this.canExecute = canExecute;    
    }    

    public bool CanExecute(object parameter)    
    {    
        return this.canExecute == null || this.canExecute(parameter);    
    }    

    public void Execute(object parameter)    
    {    
        this.execute(parameter);    
    }    
}  

XAML:

<Button Command={Binding ShowThingCommand } />

重要的部分是CanExecute方法,当它返回false时,您的Button被禁用