在WinRT WP8.1应用程序上使用ListView:
我正在尝试在ListView上使用ContainerContentChanging事件 -
private void ListOnContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args)
{
var viewer = args.ItemContainer.ContentTemplateRoot as View;
if (viewer == null)
{
return;
}
if (args.InRecycleQueue)
{
viewer.ClearData();
}
else if (args.Phase == 0)
{
viewer.ShowPlaceholder(args.Item as ViewModel);
args.RegisterUpdateCallback(this.ContainerContentChangingDelegate);
}
else if (args.Phase == 1)
{
// Load
args.RegisterUpdateCallback(this.ContainerContentChangingDelegate);
}
else if (args.Phase == 2)
{
// Load more
args.RegisterUpdateCallback(this.ContainerContentChangingDelegate);
}
else if (args.Phase == 3)
{
// Show images
}
args.Handled = true;
}
我遇到的问题是在滚动查看更多项目时,ContainerContentChangingEventArgs上的Phase属性始终为0。
(所有这些都适用于初始视图中加载的项目 - 仅当我开始滚动时,没有任何项目通过其占位符更新。
为什么hase属性不会更新?
答案 0 :(得分:0)
注册更新回调时需要指定阶段号。
您的代码应如下所示:
private void ListOnContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args)
{
var viewer = args.ItemContainer.ContentTemplateRoot as View;
if (viewer == null)
{
return;
}
if (args.InRecycleQueue)
{
viewer.ClearData();
}
else if (args.Phase == 0)
{
viewer.ShowPlaceholder(args.Item as ViewModel);
args.RegisterUpdateCallback(1, this.ContainerContentChangingDelegate);
}
else if (args.Phase == 1)
{
// Load
args.RegisterUpdateCallback(2, this.ContainerContentChangingDelegate);
}
else if (args.Phase == 2)
{
// Load more
args.RegisterUpdateCallback(3, this.ContainerContentChangingDelegate);
}
else if (args.Phase == 3)
{
// Show images
}
args.Handled = true;
}