我在具有 ItemContainerStyleSelector 的 Windows 商店应用程序中有一个 GridView。在样式中是一个 Image 控件,它有一个自定义的依赖属性来设置源(这样我就可以获得 Image 的句柄并连接到 unloaded 事件)。我的问题是图像永远不会被卸载并且似乎被重用了。这意味着当我设置源时,图像也会设置在 GridView 中的其他项目上(例如,我有一个没有图像的对象,但在滚动离开然后再返回它有来自另一个对象的图像)。
我试图将虚拟化模式设置为标准,但它没有帮助。任何想法将不胜感激。
这是样式中包含的图像。设置时将其传递给方法“OnRemoteURISourceChanged”。每当调用该方法时,我都希望有一个不同的图像控件,但事实并非如此。
<Image x:Name="BackgroundImage" DataContext="{Binding CurrentBackdrop}" helpers:ImageExtensions.RemoteURISource="{Binding Uri}" Stretch="UniformToFill"/>
这是我的 GridView
<GridView x:Name="ItemsGrid" Grid.Row="1" ItemsSource="{Binding BrowseResults}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" Margin="20,0,20,0"
IsItemClickEnabled="True" ItemClick="ItemsGrid_ItemClick" VirtualizingStackPanel.VirtualizationMode="Standard">
<GridView.ItemContainerStyleSelector>
<controls:UPnPCDStyleSelector CDObject="{StaticResource somestyle1}" Container="{StaticResource somestyle2}" Item="{StaticResource somestyle3}"/>
</GridView.ItemContainerStyleSelector>
<GridView.ItemsPanel>
<ItemsPanelTemplate VirtualizingStackPanel.VirtualizationMode="Standard">
<WrapGrid Orientation="Vertical" VirtualizingStackPanel.VirtualizationMode="Standard"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
</GridView>
更新:问题似乎是 WrapGrid。如果我将其更改为 VirtualizingStack 面板并将 VirtualizationMode 设置为 Standard,那么一切都按预期工作,但显然我的项目只出现在一行上,而不是我希望的多行上。
如何设置 WrapGrid 的虚拟化模式?