如何检测何时在Windows Phone 7中完成了对UI元素(全景图和列表框)的数据绑定?

时间:2011-10-05 19:10:56

标签: windows-phone-7 panorama-control listbox-control

我在Panorama中有一个Panorama控件和ListBox控件。是否有任何“事件”,我可以挂钩或以任何方式检测何时完成与Panorama和/或ListBox控件关联的所有数据绑定或UI显示?

我需要检测此事件的原因是因为我想在Panorama和/或ListBox控件完全绑定并完成渲染后才显示ApplicationBar。

例如,我的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对象(PO​​CO)如下所示。

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 个答案:

答案 0 :(得分:4)

简短回答是“不,你无法察觉”。

但一个好的解决方案是将命令添加到UI工作队列中。调度员。像这样:

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

这样,当所有其他UI任务完成时,它将首先呈现它,并且体验不应该那么尴尬。