Laden...

Problem mit DelegateCommand, ICommand, override

Erstellt von ByteProof vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.625 Views
Thema geschlossen
B
ByteProof Themenstarter:in
6 Beiträge seit 2014
vor 9 Jahren
Problem mit DelegateCommand, ICommand, override

Hi Leute,

wenn ich meinen Code debugge bekomme ich immer folgende Fehlermeldung:

Fehlermeldung:
Fehler 1 'WpfApplication6.Commands.DelegateCommand.CanExecute(object)': Es wurde keine passende Methode zum Überschreiben gefunden. C:\Users\Martin\documents\visual studio 2013\Projects\WpfApplication6\WpfApplication6\Commands\DelegateCommand.cs 25 30 WpfApplication6
Fehler 2 'WpfApplication6.Commands.DelegateCommand.Execute(object)': Es wurde keine passende Methode zum Überschreiben gefunden. C:\Users\Martin\documents\visual studio 2013\Projects\WpfApplication6\WpfApplication6\Commands\DelegateCommand.cs 35 30 WpfApplication6

DelegateCommand:

public class DelegateCommand : ICommand
    {
        private readonly Predicate<object> _canExecute;
        private readonly Action<object> _execute;
        public event EventHandler CanExecuteChanged;
        
        public DelegateCommand(Action<object> execute) : this (execute, null)
        { }

        public DelegateCommand(Action<object> execute, Predicate<object> canExecute)
        {
            _execute = execute;
            _canExecute = canExecute;
        }

        public override bool CanExecute(object parameter)
        {
            if (_canExecute == null)
            {
                return true;
            }

            return _canExecute(parameter);
        }

        public override void Execute(object parameter)
        {
            _execute(parameter);
        }

        public void RaiseCanExecuteChanged()
        {
            if (CanExecuteChanged != null)
            {
                CanExecuteChanged(this, EventArgs.Empty);
            }
        }
    }

Im MainViewModel habe ich die Methoden, die ich an DelegateCommand übergebe.

MainViewModel:

public class MainViewModel : BaseViewModel
    {
        private MainView _mainView;
        private ICommand _updateCommand2;

        public MainViewModel()
        {
            _mainView = new MainView(this);
            _mainView.Show();
        }

        public ICommand UpdateCommand2
        {
            get
            {
                if (_updateCommand2 == null)
                {
                    _updateCommand2 = new DelegateCommand (UpdateCommand_Execute, UpdateCommand_CanExecute);
                }

                return _updateCommand2;
            }

            set
            {
                _updateCommand2 = value;
            }
        }

        private void UpdateCommand_Execute(object parameter)
        {
            MessageBox.Show("Hello World");
        }

        private bool UpdateCommand_CanExecute(object parameter)
        {
            return true;
        }
    }

Warum findet er keine passende Methode?

M
402 Beiträge seit 2005
vor 9 Jahren

Hallo...

Warum findet er keine passende Methode?

Weils eben keine gibt die überschrieben werden könnte.

Weißt du überhaupt was "override" in der DelegateCommand-Klasse macht bzw. machen soll?

lg

M
171 Beiträge seit 2012
vor 9 Jahren

Mit override übersachreibst Du virtuelle oder abstrakte Methoden einer Basisklasse. Deine DelgateCommand Klasse implementiert aber lediglich ein Interface.

Lass das override mal weg und versuche es nochmal...

5.657 Beiträge seit 2006
vor 9 Jahren

Siehe auch override und Schnittstellen (C#-Programmierhandbuch).
Bitte beachte [Hinweis] Wie poste ich richtig? , besonders Punkt 1.

Weeks of programming can save you hours of planning

Thema geschlossen