2016-12-26 16 views
1

これは主観的な質問であり、閉鎖されているかもしれないと警告しましたが、とにかく尋ねます。現在のMainWindowインスタンスを取得するためのWPFベストプラクティス?

私は基本的に、MainWindowの中からロードされたUserControlのWPFアプリケーションのMainWindowのボタンにアクセスしようとしています。

私は現在、背後にあるUserControlのコードから、このようにそれをアクセスしています:

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

しかし、それは厄介に見えるんし、私が何を読んでからは、ベストプラクティスとはみなされません。 MainWindowの現在のインスタンスやその他のアクティブなウィンドウ/ビューからコントロール/プロパティにアクセスするためのベストプラクティスとなる回答を提供できる人は誰ですか?

答えて

5

Window.GetWindowメソッドを使用して、UserControlの親ウィンドウへの参照を取得できます。ユーザーコントロールがロードされた後、これを呼び出す:あなたはまた、Application.Current.Windowsプロパティを使用して、開いているすべてのウィンドウにアクセスすることができ

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

使用する1つ
MainWindow mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault(); 

が要件に依存します。何らかの理由でアプリケーションのメインウィンドウへの参照が必要な場合は、現在の方法に固執する可能性があります。 UserControlの親ウィンドウへの参照が必要な場合は、Window.GetWindowメソッドを使用する方が良いでしょう。

MVVMデザインパターンを使用し、UIコントロールをバインドして、複数のビューで共有できるビューモデルのプロパティを取得することをお勧めします。しかしそれは別の話です。 MVVMパターンの詳細については、次のリンクを参照してください。https://msdn.microsoft.com/en-us/library/hh848246.aspx

+0

これは素晴らしい感謝です!mm8! – ganjeii

+1

メインウィンドウに頻繁にアクセスしている場合は、どこか静的な参照にすることを検討します。すなわち、シングルトンなどを使用します。 – Kelly

関連する問題