Frage

Ich habe eine Viewmodel-Klasse, die i-Befehl in Aktualisieren des eingebauten reagieren will Zugstrecke von einer Schaltfläche ausgelöst wird, aber ich bin nicht sicher, wie die Command zu erklären.

Kurz gesagt, mein Code ist wie unten

Der Viewmodel Konstruktor und CanExecute und Ausgeführt Event-Handler -

    public ViewModel()
    {
        CommandBinding binding = new CommandBinding(NavigationCommands.Refresh, CommandHandler);
        binding.CanExecute += new CanExecuteRoutedEventHandler(binding_CanExecute);
        binding.Executed += new ExecutedRoutedEventHandler(binding_Executed);
        CommandManager.RegisterClassCommandBinding(typeof(ViewModel), binding);
    }
    void binding_Executed(object sender, ExecutedRoutedEventArgs e)
    {
        Debug.Print("Refreshing...");
    }

    void binding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
    {
        e.CanExecute = true;
    }

Das Markup ist -

<Button Command="Refresh">refresh</Button>

Nun, ich habe versucht, auf diese Schaltfläche, um die Command Einstellung zu {Binding Source={StaticResource ViewModel}} aber ich bekomme eine Laufzeit sagen Cannot convert the value in attribute 'CommandTarget' to object of type 'System.Windows.IInputElement'.

Ich bin neu auf Befehle, so dass es durchaus möglich ist, ich alle Arten von falsch bin hier. Anyhelp würde geschätzt.

War es hilfreich?

Lösung

RoutedCommands und MVVM nicht mischen. RoutedCommands an den visuellen Baum gebunden und auf WPF CommandBindings Sammlung verlassen. Sie sollten Ihre eigenen ICommand Klassen implementieren, die mit dem MVVM Muster arbeiten. Schauen Sie sich auf Prism Implementierungen für den Anfang.

In meinem eigenen MVVM Projekte, ich habe ein paar Befehl Implementierungen:

  • DelegateCommand. Fordert die Delegierten zur Verfügung gestellt, um zu bestimmen, ob der Befehl ausgeführt werden kann, und den Befehl auszuführen.
  • ActiveAwareCommand. Arbeitet in Verbindung mit einer Schnittstelle (IActiveAware) und sendet Befehlsausführungen an das gerade aktive Element. Mehrere aktive bewusst Implementierungen registrieren sich mit dem Befehl und der Befehl automatisch Routen CanExecute / Execute Anrufe an die gerade aktive Element.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top