我在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对象(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控件之前始终可见。对我而言,这会让用户体验尴尬。
感谢任何帮助。
答案 0 :(得分:4)
简短回答是“不,你无法察觉”。
但一个好的解决方案是将命令添加到UI工作队列中。调度员。像这样:
Dispatcher.BeginInvoke(() => ApplicationBar.IsVisible = true);
这样,当所有其他UI任务完成时,它将首先呈现它,并且体验不应该那么尴尬。