2010-08-11 21 views
5

J'ai un StatusBar dans ma fenêtre principale, et j'ai aussi une copie d'un UserControl dans ma fenêtre principale. Depuis les gestionnaires d'événements dans mon UserControl, je veux mettre à jour le StatusBar dans la fenêtre principale. Quelle serait la meilleure façon de faire cela? Y at-il un moyen d'accéder à l'instance de ma fenêtre principale de object sender ou RoutedEventArgs e dans un gestionnaire d'événements dans UserControl?WPF, mise à jour de la barre d'état dans la fenêtre principale à partir de UserControl

Edit: grâce à lukas's answer et this tutorial, je suis venu avec la solution suivante:

Ajouté à mes UserControl:

public delegate void UpdateStatusBarEventHandler(string message); 

public event UpdateStatusBarEventHandler UpdateStatusBar; 

Ajouté au constructeur de ma fenêtre principale, après InitializeComponent:

uct_requiredFields.UpdateStatusBar += updateStatusBar; 

Et j'ai ajouté cette méthode à ma fenêtre principale:

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

Puis, à partir de mon UserControl, je peux faire ce qui suit pour mettre à jour la barre d'état:

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

Répondre

5

Je voudrais ajouter un événement à usercontrol via mon propre délégué ou défini

public event UpdateStatusBar UpdateBar; 

puis remonter via le bouton clic dans UserControl (ou toute autre chose que u utiliser)

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

Je suppose u ont une instance de contrôle utilisateur dans la fenêtre principale dans contructor

myUserControl.UpdateBar += MyMethodWhichUpdatesStatusBar();