2016-08-09 5 views
0

Wenn ein Element die Command-Eigenschaft an einen ICommand gebunden hat, können Sie erwarten, dass sich der aktivierte Status auf ICommand.CanExecute stützt. Was ich tun möchte, ist eine Schnittstelle zu erstellen, die von ICommand erbt, die ein "MayExecute" zur Verfügung stellt, um dasselbe für die Sichtbarkeit der Steuerung zu tun. Gibt es einen sauberen Weg, dies zu tun, ohne .NET effektiv neu zu kompilieren?Kann man das ICommand-Verhalten von WPF für Steuerelemente erweitern?

Antwort

1

Ich würde dies mit einer angehängten Eigenschaft tun. Ich denke, es ist machbar (und auch ziemlich cool).

Die angefügte Eigenschaft hätte eine Methode, um zu überprüfen, ob der Wert Command auf dem Zielsteuerelement IVanishingCommand implementiert oder wie Sie es nennen. Wenn dies der Fall ist, wird MayExecuteChanged abonniert und die Sichtbarkeit des Steuerelements wird entsprechend überschrieben.

Sie würden diese Methode erneut aufrufen, wenn Command einen neuen Wert erhält (und sich vom alten Command Ereignis abmelden).

Verwenden Sie die Reflektion, um die Command Abhängigkeitseigenschaft des Steuerelements zu erhalten; Button und MenuItem zum Beispiel erben beide Command nicht von einer gemeinsamen Basisklasse.

Sie könnten dies auch mit einem Auslöser in einem Stil tun - aber es würde bald schrecklich werden, es in all diesen verschiedenen Stilen zu tun.

Verwandte Themen