我的控件.ItemContainerGenerator.Status是NotStarted。我如何告诉它现在开始并等到它完成?
答案 0 :(得分:9)
如果你进行一些同步操作,你可能想要手动启动生成器 - 我必须生成结果视图以在页面上进行分块之前对其进行测量。
IItemContainerGenerator generator = (child as ListContent).ItemContainerGenerator;
GeneratorPosition position = generator.GeneratorPositionFromIndex(0);
using (generator.StartAt(position, GeneratorDirection.Forward,true))
{
foreach (object o in (child as ListContent).Items)
{
DependencyObject dp = generator.GenerateNext();
generator.PrepareItemContainer(dp);
}
}
答案 1 :(得分:1)
绑定并显示ItemsControl。 ItemContainerGenerator将启动并生成项目作为数据绑定周期的一部分。
如果您确实需要手动启动生成器,则可以通过调用IItemContainerGenerator.StartAt来执行此操作。这是一个显式的接口实现,因此您需要转换ItemsControl.ItemContainerGenerator属性,例如((IItemContainerGenerator)(listBox.ItemContainerGenerator)).StartAt(...);
。但是在应用程序代码中很少需要手动启动生成器。
答案 2 :(得分:0)
您可以使用
ItemContainerGenerator.StatusChanged
状态更改时要处理的事件