FrameworkElement.Loaded 虚拟化列表视图中图像的方法

FrameworkElement.Loaded method for an image in a virtualized listview

在我的 ListView 中,我的 DataTemplate 中有一个图像,它使用转换器加载图像。如果正在加载的图像不存在,转换器将加载占位符图像。接下来,在图像的 FrameworkElement.Loaded 方法中,我创建了丢失的图像,它异步显示在屏幕上。一切都很好……除了一件事。

加载方法似乎并没有为每个丢失的图像调用 - 我可以告诉。有时它会加载 DataContext 的空值 - 但只是有时?有时加载图像 1 的图像,例如图像 33。

通常发生的情况是,对于屏幕上丢失的大部分图像,它们会被正确创建和加载,但随后它只会在屏幕上图像的末尾附近停止。我相信这是由于虚拟化在 uwp 中的工作方式,就像 wpf 应用程序中的相同方法,虚拟化关闭后按预期工作。

所以我的问题是:

加载到 ListView 的 DataTemplate 中时,如何访问每个图像?如果 Loaded 是错误的方法,那么正确的方法是什么?

答案是在打开占位符图像时使用 ImageOpened 方法(如果实际图像不存在)。所以我在 ImageOpened 方法中检查打开的图像是占位符并从那里调用我的 CreateImage 方法。