Question

i have a Panorama control and ListBox controls inside the Panorama. is there any "event" that i can hook on to or any way to detect when all the data binding or UI display associated with the Panorama and/or ListBox controls are finished?

the reason i need to detect this event is because i want to show the ApplicationBar only after the Panorama and/or ListBox controls have completely binded and finished rendering.

for example, my XAML is defined as the following.

<controls:Panorama Name="panorama">
 <controls:Panorama.ItemTemplate>
  <DataTemplate>
   <ListBox ItemsSource="{Binding Details}">
    <ListBox.ItemTemplate>
     <DataTemplate>
      <TextBlock Text="{Binding Field1}"/>
      <TextBlock Text="{Binding Field2}"/>
      ...
      <TextBlock Text="{Binding FieldN}"/>
     </DataTemplate>
    </ListBox.ItemTemplate>
   </ListBox>
  </DataTemplate>
 </controls:Panorama.ItemTemplate>
</controls:Panorama>

my plain-old CLR object (POCO) looks like the following.

public class MyPoco {
 List<Detail> Details { get; set; }
}
public class Detail {
 public string Field1 { get; set; }
 public string Field1 { get; set; }
 ...
 public string FieldN { get; set; }
}

in my c# code-behind, i bind the data as follows.

List<MyPoco> pocos = GetMyPocosFromSomewhere();   
panorama.ItemsSource = myList;
ApplicationBar.IsVisible = true; //i only want to make this visible after the Panorama and ListBox controls have finished binding and rendering

right now, the code as i have sketched out above works, but the ApplicationBar is always visible before the Panorama/ListBox controls have rendered. to me, this makes the user experience awkward.

any help is appreciated.

Was it helpful?

Solution

Short answer would be "no, you can't detect it".

But a good solution is to add the command to the UI work queue aka. the Dispatcher. Like this:

Dispatcher.BeginInvoke(() => ApplicationBar.IsVisible = true);

That way, it'll first render it, when all the other UI tasks are done, and the experience shouldn't be so awkward.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top