Wie befestige ich die Befehle, um die zu aktivieren und zu deaktivieren eines Kontrollkästchens?
In meinem ViewModel habe ich zwei Befehle:
ICommand ExecuteMeOnCheck { get; }
ICommand ExecuteMeOnUncheck { get; }
Möchte ich anfügen, diese Befehle zu einem Kontrollkästchen und einer von Ihnen ausführen, wenn es aktiviert ist und die anderen ausführen, wenn es deaktiviert ist. Was ist der beste Weg, dies zu erreichen, ohne überladen die Ansicht mit code-behind?
- Was ist Los mit die übersichtlichkeit der code-behind-mit diesem? Es ist die einfachste Lösung, um zu verstehen, und es hält immer noch die View-ViewModel-Trennung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die einfachste Möglichkeit die ich gefunden habe, um dies zu tun beinhaltet das ausleihen einer Reihe von code. Ich denke auch, dass Sie nicht wollen, legen zwei Ereignisse, die für den Status ändern. Machen Sie Ihren Befehl CheckedChangedCommand anstelle von Checked und Unchecked. Binden Sie das Kontrollkästchen.IsChecked Abhängigkeit Eigenschaft einer Eigenschaft auf Ihre ViewModelClass. So, wenn Ihr Befehl wird ausgeführt, müssen Sie nur überprüfen, dass der Wert im ViewModel.
Ersten, beginnen mit DelegateCommand aus der WPF-ViewModel-toolkit. Es ist nicht klar aus deinem post, ob du es bist oder nicht.
Nächste, laden Sie die .zip-Archiv aus der Registerkarte "Downloads" unter diesem link.
Archiv hat eine Klasse namens EventBehaviourFactory das macht die Einstellung der DependencyProperty einfacher. Zurück auf die Registerkarte "Home" unter dem oben genannten link, Samuel erzählt, wie Sie an dem Draht, bis der Befehl im XAML-Code an das ViewModel. Hier ist es:
Ich verwendet die drei Klassen (DelegateCommand, EventBehaviourFactory und TextBoxBehaviour) Zeile für Zeile und hatte das TextChanged-Ereignis, die Arbeit in meinem Projekt in etwa fünf Minuten.
Das Muster für die Ausweitung auf andere Steuerelemente, wie Sie tun müssen, ist einfach zu. Ich schaffte es Draht bis ListBox.SelectionChanged die gleiche Weise. Erstellen Sie eine neue ControlBehaviour Klasse und ersetzen Sie "Control" für "TextBox" in allen Instanzen und befestigen Sie die DependencyProperty-der neuen event.
Es ist eine schöne Sache, wenn der code dahinter ist leer!!!
Habe ich diese mit einem Trigger auf "IsChecked", setzt der Befehl.
z.B.
Andere Lösung, ähnlich wie Eddie ' s : die Befestigt Befehl Verhaltensweisen von Marlon Grech
Können Sie auch die CheckBox Command-Eigenschaft zu befestigen, nur einen Befehl, bei dem Sie testen, ob die checkbox aktiviert ist...
Oder Sie können binden Sie das IsChecked-Eigenschaft an eine Eigenschaft der ViewModel, und reagieren auf die änderung in den setter der Eigenschaft.
Dies bezieht sich auf Eddie ' s Antwort.
Ich spielte mit ihm ein bisschen und es ist toll ich habe auch eine kleine Vorlage zum erstellen neuer Befehle. Ich verwende es mit Sharpdevelop als ein code-snippet. Fügen Sie den folgenden in den code (e.g.über ein snippet):
Dann führen Sie eine Suche ersetzen Sie "$name" mit dem Namen der Veranstaltung/Befehl z.B. MouseEnter
ote, es ist wichtiger, dass Sie stellen Sie sicher pick das Recht classname für die Besitzer (in meinem Fall ControlBehavior.
Ich bin eienr Klasse, die ich erstellt für die gemeinsame Maus-Befehle, in der Hoffnung, dass anderen Menschen teilen und wir nicht nur umsetzen, die gleiche Sache über und über, wo wir hätten viel Zeit gespart durch den Austausch. Hier meine komplette ControlBehavior Klasse (ich habe nur die Umsetzung der Ereignisse, die ich brauchte, so weit):
Durch die Verwendung von oben genannten Vorlage es dauerte nur ein paar Sekunden für jeden Befehl.
gut Sie können, Erben von der checkBox-Steuerelement, fügen Sie die zwei Befehle als Eigenschaften (Abhängigkeit Propertiess) und überschreiben dann die OnChecked und OnUnchecked Methoden und trigger-jeder Befehl an der entsprechenden Stelle