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
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.