我有两种方法几乎可以完成两件事:
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中使用?
显然,互联网上从来没有人遇到过这个问题,所以我认为我在这里遗漏了一些东西...
答案 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
被禁用