2010-08-11 23 views
5

Ich habe eine StatusBar in meinem Hauptfenster, und ich habe auch eine Kopie von UserControl in meinem Hauptfenster. Von Eventmanagern in meinem UserControl möchte ich das StatusBar im Hauptfenster aktualisieren. Was wäre der beste Weg, dies zu tun? Gibt es eine Möglichkeit, Zugriff auf die Instanz meines Hauptfensters von object sender oder RoutedEventArgs e in einem Ereignishandler in UserControl zu erhalten?WPF, Update Statusleiste im Hauptfenster aus UserControl

Edit: dank lukas's answer und this tutorial, kam ich auf die folgende Lösung:

Hinzu meine UserControl:

public delegate void UpdateStatusBarEventHandler(string message); 

public event UpdateStatusBarEventHandler UpdateStatusBar; 

hinzugefügt mein Haupt Konstrukteurs-Fenster, nachdem InitializeComponent:

uct_requiredFields.UpdateStatusBar += updateStatusBar; 

Und ich habe diese Methode hinzugefügt Zu meinen Hauptfenster:

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

Dann aus meinem UserControl, kann ich folgendes aktualisieren, um die Statusleiste tun:

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

Antwort

5

ich eine Veranstaltung hinzufügen würde über meine eigenen Delegierten oder definiert Usercontrol

public event UpdateStatusBar UpdateBar; 

und es dann in Usercontrol über den Button klicken steigen (oder eine andere Sache, die u verwenden)

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

Ich gehe davon aus u eine Instanz von Usercontrol hat im Hauptfenster in contructor

myUserControl.UpdateBar += MyMethodWhichUpdatesStatusBar(); 
Verwandte Themen