如果我有这样的模型:
公共类LayerViewModel {
public LayerViewModel(string name, string alias, UIElement representation)
{
Name = name;
Alias = alias;
Representation = representation;
}
public string Name { get; set; }
public string Alias { get; set; }
public UIElement Representation
{
get; private set;
}
}
使用以下DataTemplate:
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ContentControl Content="{Binding Representation, Mode=OneTime}"/>
<TextBlock
VerticalAlignment="Center"
Grid.Column="1" Text="{Binding Alias}"
FontSize="{StaticResource PhoneFontSizeLarge}"
Margin="16 21 0 20" TextWrapping="Wrap"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
如果将这些模型的集合绑定到ListBox,导航并返回到ListBox的包含页面,则应用程序将崩溃。这是因为即使ListBox的ItemSource在卸载其包含页面时设置为null,也不会从VisualTree中释放LayerViewModel.Representation。我使用DependencyObject.GetVisualAncestors()来确认这一点。
如何让ListBox完全释放所有编译其VisualTree的UIElements?将其ItemsSource设置为null并不能实现这一目标。