tags:

views:

455

answers:

3

I am listening for the loaded event of a Page. That event fires first and then all the children fire their load event. I need an event that fires when ALL the children have loaded. Does that exist?

+2  A: 

Loaded is the event that fires after all children have been Initialized. There is no AfterLoad event as far as I know. If you can, move the children's logic to the Initialized event, and then Loaded will occur after they have all been initialized.

See MSDN - Object Lifetime Events.

configurator
A: 

WPF cant provide that kind of an event since most of the time Data is determining whther to load a particular child to the VisualTree or not (for example UI elements inside a DataTemplate)

So if you can explain your scenario little more clearly we can find a solution specific to that.

Jobi Joy
A: 

I ended up doing something along these lines.. your milage may vary.

void WaitForTheKids(Action OnLoaded)
{
  // After your children have been added just wait for the Loaded
  // event to fire for all of them, then call the OnLoaded delegate

  foreach (ContentControl child in Canvas.Children)
  {
    child.Tag = OnLoaded; // Called after children have loaded
    child.Loaded += new RoutedEventHandler(child_Loaded);
  }
}
internal void child_Loaded(object sender, RoutedEventArgs e)
{
  var cc = sender as ContentControl;
  cc.Loaded -= new RoutedEventHandler(child_Loaded);

  foreach (ContentControl ctl in Canvas.Children)
  {
    if (!ctl.IsLoaded)
    {
      return;
    }
  }
  ((Action)cc.Tag)();
}
Weezelboy