1. Comprensione del Application.Current.MainWindow
Quando l'applicazione apre la prima finestra (MainWindow.xaml
), la finestra viene impostata su Application.Current.MainWindow
. Quando la finestra è chiusa, un'altra finestra attualmente aperta è impostata su Application.Current.MainWindow
. Se non ci sono finestre aperte, Application.Current.MainWindow è impostato su null.
ad es. se apri LoginWindow
all'avvio, Application.Current.MainWindow
sarà LoginWindow
. Quando si chiude LoginWindow
, quindi Application.Current.MainWindow
può essere Window1
per esempio.
2. Accedere esempio MainWindow
se si desidera accedere a un'istanza della classe MainWindow si dovrebbe fare seguente: Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
tuttavia, se MainWindow non è aperto, allora verrà restituito nulla. Non tentare di risolvere il problema: se MainWindow non è ancora aperto, o è già chiuso, non dovresti accedervi.
3. MVVM
nel modello MVVM, non si dovrebbe accedere vista direttamente dal tuo ViewModel. Se lo facessi, interromperesti i principali problemi MVVM, come Separazione delle preoccupazioni, testabilità, ecc. Ecc. La domanda è allora, perché vuoi mvvm.
Se si desidera eseguire un'azione in MainWindow
, è necessario eseguire l'azione su MainWindowViewModel
. Se la finestra è aperta, rifletterà le modifiche in ViewModel. Se non lo è, allora il cambiamento non deve essere riflesso. MainWindowViewModel
non dovrebbe avere un riferimento diretto all'istanza MainWindow
.
È divertente, ho appena visto quel post pochi minuti fa. –
Ho appena provato questo, prima di impostarlo ho controllato ed è stato impostato (ma impostato di nuovo), ma in seguito è nuovamente nullo, qualsiasi idea di cosa potrebbe causarlo? Per quanto posso vedere, la mia applicazione non lo ha mai impostato, quindi esiste uno scenario generico WPF che potrebbe impostarlo su null? –
Mi spiace, ma non sono a conoscenza di alcuna situazione in cui ciò potrebbe accadere ... non mi è mai successo, ma se stai usando qualsiasi framework di terze parti, potrebbero farlo per qualche motivo. – Sheridan