WPF / MVVM: Deaktiviert den Status einer Schaltfläche, wenn das ViewModel hinter dem UserControl noch nicht initialisiert ist?

8

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.

    
Elisabeth 12.12.2010, 20:07
quelle

2 Antworten

18

Oder Sie können einen Stil für die Schaltfläche verwenden, um zu deaktivieren:

%Vor%     
Goblin 12.12.2010, 21:48
quelle
5

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%     
Josh 12.12.2010 20:16
quelle

Tags und Links