2016-12-26 7 views
1

У меня есть предупреждение, что это может быть субъективным вопросом и может быть закрыт, но я все равно спрошу.Лучшая практика WPF для получения текущего экземпляра MainWindow?

Я в основном пытаюсь получить доступ к кнопке на моем MainWindow в приложении WPF из UserControl, который загружается из MainWindow.

Я в настоящее время доступ к нему, как это из кода UserControl позади:

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

Но это выглядит неаккуратно, и от того, что я прочитал, не считается лучшей практики. Любой, кто может предоставить ответ, который представляет собой наилучшую практику для доступа к элементам управления/свойствам из текущего экземпляра MainWindow - или любых других активных окон/представлений?

ответ

5

Вы можете получить ссылку на родительское окно UserControl, используя метод Window.GetWindow. Позвоните в этот раз было загружено UserControl:

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

Вы также можете получить доступ к всем открытым окнам с помощью свойства Application.Current.Windows:

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

Какой из них использовать, зависит от ваших требований. Если по какой-либо причине вы хотите получить ссылку на главное окно приложения, вы можете придерживаться своего текущего подхода. Если вам нужна ссылка на родительское окно UserControl, использование метода Window.GetWindow будет лучше.

Лучшей практикой является, как правило, использование шаблона проектирования MVVM и привязка элементов пользовательского интерфейса к свойствам источника модели представления, которые могут использоваться несколькими видами. Но это уже другая история. Дополнительную информацию о шаблоне MVVM можно найти по следующей ссылке: https://msdn.microsoft.com/en-us/library/hh848246.aspx

+0

Это большое спасибо mm8! – ganjeii

+1

Если вы часто обращались к главному окну, я бы подумал о том, чтобы сделать его статической ссылкой. т.е.: используя синглтон или что-то подобное. – Kelly