Связывание команд WPF с методом, возвращающим bool - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть два метода, которые делают почти две вещи:

    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 голосов
/ 30 ноября 2018

Вы не можете напрямую привязать метод.

Я думаю, что вы действительно хотите достичь, это что-то вроде

Код:

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 отключается

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...