Как определить, когда привязка данных к элементам пользовательского интерфейса (панорама и список) завершена в Windows Phone 7?

У меня есть элемент управления Panorama и ListBox внутри Панорамы. Есть ли какое-либо "событие", к которому я могу подключиться или каким-либо образом определить, когда все привязки данных или отображение пользовательского интерфейса, связанные с элементами управления Panorama и / или ListBox, завершены?

причина, по которой мне нужно обнаружить это событие, заключается в том, что я хочу показать ApplicationBar только после того, как элементы управления Panorama и / или ListBox полностью связали и закончили рендеринг.

например, мой XAML определяется следующим образом.

<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>

мой простой старый объект CLR (POCO) выглядит следующим образом.

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; }
}

в моем коде C#, я связываю данные следующим образом.

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

прямо сейчас код, как я набросал выше, работает, но ApplicationBar всегда виден до визуализации элементов управления Panorama/ListBox. для меня это делает пользовательский опыт неловким.

любая помощь приветствуется.

1 ответ

Решение

Короткий ответ будет: "Нет, вы не можете его обнаружить".

Но хорошее решение - добавить команду в рабочую очередь пользовательского интерфейса. Диспетчер. Как это:

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

Таким образом, он сначала отобразит его, когда все другие задачи пользовательского интерфейса будут выполнены, и опыт не должен быть таким неловким.

Другие вопросы по тегам