Xaml 在UWP中的代码隐藏中使用事件处理程序时,DataTemplate导致内存泄漏。有人知道为什么吗?
我有一个带有GridView的网格的页面。GridViews ItemTemplate设置为StaticResource DataTemplate。在DataTemplate中,我有几个到数据类型属性的绑定,但我也将DataTemplate网格控件中的DoubleTapped和RightTapped事件挂接到页面代码背后的处理程序。此设置导致页面永远无法获取GC'd 如果我从DataTemplate中删除这些事件,或者将处理程序方法直接放在数据类型对象本身中,GC工作正常,页面将被拾取 你知道为什么将这些事件连接到生活在代码背后的处理程序会导致这个页面永远得不到GC吗?这可能是在转移视线,而问题可能在其他地方?下面是数据模板Xaml 在UWP中的代码隐藏中使用事件处理程序时,DataTemplate导致内存泄漏。有人知道为什么吗?,xaml,uwp,memory-leaks,datatemplate,Xaml,Uwp,Memory Leaks,Datatemplate,我有一个带有GridView的网格的页面。GridViews ItemTemplate设置为StaticResource DataTemplate。在DataTemplate中,我有几个到数据类型属性的绑定,但我也将DataTemplate网格控件中的DoubleTapped和RightTapped事件挂接到页面代码背后的处理程序。此设置导致页面永远无法获取GC'd 如果我从DataTemplate中删除这些事件,或者将处理程序方法直接放在数据类型对象本身中,GC工作正常,页面将被拾取 你知道为
- 更新12/8/2020-因此,不仅上述解决方案可以让GC获取页面,我还发现使用数据模板选择器也可以纠正问题(为GC释放页面)!我仍然不明白为什么数据模板中的事件会导致这个问题,或者为什么这些解决方法可以解决这个问题。我希望有人能解释一下。此外,这个问题不是GridView独有的。我还发现,将该模板用于ListView和NavigationView时也会发生这种情况
<DataTemplate x:Key="MyDataTemplate"> <Grid Name="MyGrid" Margin="0" IsDoubleTapEnabled="True" DoubleTapped="OnDoubleTapped" RightTapped="OnRightTapped"> <Grid.RowDefinitions> <RowDefinition Height="30"/> <RowDefinition Height="*"/> <RowDefinition Height="24"/> <RowDefinition Height="10"/> </Grid.RowDefinitions> <Border x:Name="MyBorder" Grid.Row="1" BorderThickness="0" Background="{ThemeResource SystemControlPageBackgroundChromeLowBrush}" Padding="0" Height="{Binding BorderHeight, Mode=OneWay}" Width="{Binding BorderWidth, Mode=OneWay}" Margin="0" HorizontalAlignment="Center" VerticalAlignment="Center"> <Image x:Name="Thumbnail" Grid.Row="1" Source="{Binding ThumbnailToDisplay, Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Uniform" Margin="0" Visibility="Visible" ToolTipService.ToolTip="{Binding ToolTip, Mode=OneWay}" RenderTransform="{Binding ThumbnailTransformer, Mode=OneWay}" RenderTransformOrigin="0.5,0.5"/> </Border> <TextBlock x:Name="MyTextBlock" Grid.Row="2" Margin="0" Padding="0" Text="{Binding PositionString, Mode=OneWay}" TextWrapping="NoWrap" TextTrimming="WordEllipsis" Style="{StaticResource MyTextBlockStyle}" Visibility="{Binding MyTextBlockVisibility, Mode=OneWay, FallbackValue=Collapsed}" VerticalAlignment="Bottom" HorizontalAlignment="Center"/> </Grid> </DataTemplate>