C# ICommand Button?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Zunächst erstellst du dir eine Klasse, die von ICommand ableitet und als basis für deine Commands benutzt wird:

    public class RelayCommand : ICommand
    {
        private Action<object> m_Execute;
        private Func<object, bool> m_CanExecute;

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

        public bool CanExecute(object parameter)
        {
            return m_CanExecute == null || m_CanExecute(parameter);
        }

        public void Execute(object parameter)
        {
            m_Execute(parameter);
        }
    }

Jetzt kannst du in deinem ViewModel einen Command erstellen:

        private RelayCommand _CancelCommand;
        public RelayCommand CancelCommand
        {
            get
            {
                return _CancelCommand ?? (_CancelCommand = new RelayCommand(
                        (p) =>
                        {
                            // Hier kommt der eigentliche Code für das Click-Event rein.
                        },
                        (p) => { return true; // Enable / Disable }
                    ));
            }
        }

Und zum Abschluss bindest du diesen Command an deinen Button:

<Button Command="{Binding CancelCommand}">Abbrechen</Button>

Mit dem CommandManager evaluiert man neu, ob ein Button enabled / disabled ist (gesetz dem Fall, CanExecute retuniert nicht pauschal "true"):

CommandManager.RequerySuggested
Woher ich das weiß:Berufserfahrung