2010-08-11 2 views
5

У меня есть StatusBar в моем главном окне, и у меня также есть копия UserControl в моем главном окне. Внутри обработчиков событий в моем UserControl я хочу обновить StatusBar в главном окне. Какой был бы лучший способ сделать это? Есть ли способ получить доступ к экземпляру моего главного окна от object sender или RoutedEventArgs e в обработчике событий в UserControl?WPF, обновление строки состояния в главном окне изнутри UserControl

Edit: благодаря lukas's answer и this tutorial, я придумал следующее решение:

Добавлено в мой UserControl:

public delegate void UpdateStatusBarEventHandler(string message); 

public event UpdateStatusBarEventHandler UpdateStatusBar; 

Добавлено конструктору моего главного окна, после InitializeComponent:

uct_requiredFields.UpdateStatusBar += updateStatusBar; 

И я добавил этот метод к моему главному окну:

private void updateStatusBar(string message) 
{ 
    sti_mainStatus.Content = message; 
} 

Тогда из моей UserControl, я могу сделать следующее, чтобы обновить строку состояния:

if (null != UpdateStatusBar) 
{ 
    UpdateStatusBar("woot, message"); 
} 

ответ

5

Я хотел бы добавить событие в UserControl через мой собственный делегат или определенный

public event UpdateStatusBar UpdateBar; 

, а затем подняться его с помощью кнопки мыши в UserControl (или другие вещи, что и использование)

private void UserContolButton_Click(object sender, RoutedEventArgs e) 
    { 
     if(UpdateBar != null) 
      UpdateBar(); // send here the message 
    } 

Я предполагаю, что у вас экземпляр UserControl в главном окне в застройщик

myUserControl.UpdateBar += MyMethodWhichUpdatesStatusBar();