2016-12-26 5 views
1

Ich habe eine Warnung erhalten, dass dies eine subjektive Frage sein könnte und möglicherweise geschlossen ist, aber ich werde trotzdem fragen.WPF Best Practice, um aktuelle MainWindow-Instanz zu erhalten?

Ich versuche grundsätzlich auf eine Schaltfläche auf meinem MainWindow in einer WPF-Anwendung von einem UserControl zuzugreifen, das aus dem MainWindow geladen wird.

bin Zugriff ich zur Zeit es wie folgt aus dem Usercontrol-Code hinter:

((MainWindow)Application.Current.MainWindow).btnNext 

Aber es sieht chaotisch, und von dem, was ich gelesen habe, ist keine bewährte Methode betrachtet. Jeder, der in der Lage ist, eine Antwort zu geben, die eine Best Practice für den Zugriff auf Steuerelemente/Eigenschaften von der aktuellen Instanz eines MainWindow darstellt - oder für andere aktive Fenster/Ansichten?

Antwort

5

Sie können mithilfe der Window.GetWindow-Methode einen Verweis auf das übergeordnete Fenster des UserControls abrufen. Rufen Sie diese, sobald das Usercontrol geladen wurde:

public partial class UserControl1 : UserControl 
{ 
    public UserControl1() 
    { 
     InitializeComponent(); 
     this.Loaded += (s, e) => 
     { 
      MainWindow parentWindow = Window.GetWindow(this) as MainWindow; 
      if (parentWindow != null) 
      { 
       //... 
      } 
     }; 
    } 
} 

Sie auch alle geöffneten Fenster zugreifen konnte die Application.Current.Windows Eigenschaft mit:

MainWindow mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault(); 

, die man zu verwenden, um auf Ihre Anforderungen ab. Wenn Sie aus irgendeinem Grund einen Verweis auf das Hauptfenster der Anwendung benötigen, können Sie Ihren aktuellen Ansatz beibehalten. Wenn Sie einen Verweis auf das übergeordnete Fenster des Benutzersteuerelements möchten, wäre die Verwendung der Window.GetWindow-Methode besser.

Die beste Vorgehensweise besteht im Allgemeinen darin, das MVVM-Entwurfsmuster zu verwenden und UI-Steuerelemente zu binden, um Eigenschaften eines Ansichtsmodells zu ermitteln, die von mehreren Ansichten gemeinsam verwendet werden können. Aber das ist eine andere Geschichte. Sie könnten auf den folgenden Link für weitere Informationen über das MVVM-Muster verweisen: https://msdn.microsoft.com/en-us/library/hh848246.aspx

+0

Das ist super danke mm8! – ganjeii

+1

Wenn Sie häufig auf das Hauptfenster zugreifen, würde ich es in Betracht ziehen, es irgendwo als statische Referenz zu betrachten. zB: mit einem Singleton oder etwas Ähnlichem. – Kelly

Verwandte Themen