Domanda

Nella mia domanda ho un MainWindow che l'importazione nel corso MEFedMVVM ViewModel:

xmlns:mefed="clr-namespace:MEFedMVVM.ViewModelLocator;assembly=MEFedMVVM.WPF"
mefed:ViewModelLocator.ViewModel="MainViewModel"

E ora ho il mio ViewModel troppo che realizzano il ViewModel:

[ExportViewModel("MainViewModel")]
public class MainViewModel: ViewModelBase

Nel mio ViewModel ho una proprietà ICommand per chiudere la finestra. La manifestazione per la chiusura lattina viene da nessuna parte. E con l'aiuto del Cinch Framework 2.0 mi rendo conto di un Simplecommand Execute Methode.

Domanda

Come posso chiudere la finestra della mia esecuzione Methode? Nel corso della iniezione di dipendenza non ho un costruttore non posso registrare un evento o dare la vista come parametro al ViewModel.

Modifica

Tuttavia, una possibilità che credo non è bello:

Chiamare questo nel Methode

Application.Current.MainWindow.Close()
È stato utile?

Soluzione

È possibile raggiungere questo scrivendo una ICommand che passa l'istanza Window come parametro.

Un esempio di buona è disponibile qui: Come posso assegnare il 'Chiudi premere Esc-chiave' comportamento a tutte le finestre WPF all'interno di un progetto?

In quel post il ICommand è infine associato a una KeyBinding (in modo che il tasto Esc può essere utilizzato per chiudere la finestra), ma si sarebbe in grado di legare il comando a qualsiasi pulsante o invocare da qualsiasi luogo all'interno della vista. La parte importante è quello di utilizzare un RelativeSource sul vostro comando parametro vincolante per fare riferimento al Window che si desidera chiudere

Modifica in risposta ai commenti

Il comando è un Singleton, ma non v'è alcun obbligo per essere - è solo un singleton perché è stateless e rende il legame più facile. Si acquisisce un riferimento al Window attraverso il legame, quindi per un UserControl si può semplicemente utilizzare:

<Button Command="{x:Static mynamespace:CloseWindowCommand.Instance}"
    CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}" Content="Close My Parent Window" />

Per essere in grado di chiamare dal codice vista del modello è leggermente più complicata e richiede un approccio diverso; un buon esempio può essere trovato qui: http://gallery.expression.microsoft.com/WindowCloseBehavior

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top