【发布时间】:2011-09-30 06:55:07
【问题描述】:
在 wp7 中我想刷新单独的枢轴项?这可能吗?
我正在动态创建 5 个枢轴项。我想单独刷新每个项目。
【问题讨论】:
标签: windows-phone-7 pivot
在 wp7 中我想刷新单独的枢轴项?这可能吗?
我正在动态创建 5 个枢轴项。我想单独刷新每个项目。
【问题讨论】:
标签: windows-phone-7 pivot
在 WP7 中没有刷新或重绘的概念。 Silverlight 使用保留模式图形,其中保留和管理各种 UI 元素。
当您想要“刷新”您的 UI 时,您只需更改 UI 元素的属性即可。框架负责在屏幕上反映这种变化。
【讨论】:
一个好的解决方案是将每个数据透视项中的内容数据绑定到单独的视图模型(如果该页面上有许多数据项)或可控的可观察属性(列表框)
然后您只需要独立刷新属性或视图模型,这就是在枢轴控件上为提高性能(并延迟加载数据以加快枢轴控件页面的显示速度)上的模式数据页面所做的事情
最好记住的是,您刷新的不是数据透视页面,而是其上显示的数据。
如果您想动态控制有多少枢轴项,则必须以编程方式控制。
【讨论】:
我正在使用下一种方法:每个 PivotItem 都是一个单独的 UserControl,它继承自 BaseUserControl。 BaseUserControl 有 2 个抽象方法:OnPivotItemLoaded 和 OnSelected。
默认情况下,PivotItems 是空的(或者它们可以在运行时创建,就像您的情况一样)。 然后,当 Pivot 的项目被加载(只需订阅它的事件)时,我正在调用
private void PivotItemProfile_OnLoaded(object _sender, RoutedEventArgs _e)
{
SimpleLogger.WriteLine("Creating ProfileUserControl");
var pivotItem = _sender as PivotItem;
if (pivotItem == null) return;
if (pivotItem.Content == null)
pivotItem.Content = new ProfileUserControl();
var item = (pivotItem.Content as BaseUserControl);
if (item != null)
item.OnPivotItemLoaded();
}
然后,我也订阅了 Pivot 的 OnSelectionChanged 事件:
private void PivotControl_OnSelectionChanged(object _sender, SelectionChangedEventArgs _e)
{
var pivotItem = MainPivot.SelectedItem as PivotItem;
if (pivotItem == null) return;
var item = (pivotItem.Content as BaseUserControl);
if (item != null)
item.OnPivotItemSelected();
}
所以,在 PivotItem (UserControl) 内部,我可以定义我想在这些事件中做什么。
【讨论】: