Ich habe eine DocumentListView.Xaml mit einer ListBox und 3 Buttons.
Hinter diesem UserControl befindet sich ein DocumentListViewModel mit 3 Schaltflächen und deren Befehlseigenschaft, die an 3 RelayCommands gebunden ist.
Ich habe 3 Controller wie AdministrationController, BillingController, ReportController.
Jeder Controller hat ObservableCollections wie Customer 1: N Order 1: N für den anderen Controller identisch.
In einem Controller habe ich eine spezielle Bindungssituation. Wenn mein DocumentListViewModel nicht wie das OrderViewModel von seinem übergeordneten ViewModel initialisiert wird (weil keine Aufträge geladen sind / existieren), hat mein UserControl 3 Schaltflächen, die ENABLED sind. Ok, der User kann die 3 Tasten drücken und nichts passiert aber trotzdem ist es sehr unübersichtlich und vor allem die Konsistenz in meiner Benutzeroberfläche ist weg.
Wie kann ich den Befehl einer Schaltfläche standardmäßig auf "Deaktiviert" setzen?
Das Festlegen der Schaltflächen IsEnabled-Eigenschaft auf false hilft nicht, da die Schaltfläche für immer im deaktivierten Zustand bleibt. Nein CanExecute TRUE wird auf IsEnabled = true gesetzt.
UND ich möchte nicht eine andere Eigenschaft einführen IsButtonEnabled ... das ist dumm, denn dann habe ich beide Welten winforms und wpf hinter meiner Schaltfläche Logik ... ICommand sollte ausreichen.
Das ist eine interessante Situation. Ehrlich gesagt bin ich noch nie auf den Fall gestoßen, in dem die Benutzeroberfläche geladen und interaktiv war, aber das ViewModel noch nicht gebunden war.
Wenn Sie dies jedoch für einen Moment ignorieren, könnten Sie möglicherweise einen FallbackValue für Ihre Bindung verwenden, um an einen global verfügbaren NullCommand oder etwas zu binden, das für seine CanExecute-Methode immer false zurückgibt.
%Vor%