1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
using System.Collections.Generic;
using Xamarin.Forms.CustomAttributes;
using Xamarin.Forms.Internals;
namespace Xamarin.Forms.Controls
{
[Preserve(AllMembers = true)]
[Issue(IssueTracker.Bugzilla, 41271, "[UWP] Memory Leak from ListView in TabbedPage")]
public class Bugzilla41271 : TestTabbedPage
{
[Preserve(AllMembers = true)]
class Person
{
public Person(string firstName, string lastName, string city, string state)
{
FirstName = firstName;
LastName = lastName;
City = city;
State = state;
}
public string FirstName { get; set; }
public string LastName { get; set; }
public string City { get; set; }
public string State { get; set; }
}
[Preserve(AllMembers = true)]
class ListViewCell : ViewCell
{
Label firstNameLabel = new Label();
Label lastNameLabel = new Label();
Label cityLabel = new Label();
Label stateLabel = new Label();
public ListViewCell()
{
View = new StackLayout
{
Orientation = StackOrientation.Horizontal,
Children =
{
firstNameLabel,
lastNameLabel,
cityLabel,
stateLabel
}
};
}
protected override void OnBindingContextChanged()
{
base.OnBindingContextChanged();
var item = BindingContext as Person;
if (item != null)
{
firstNameLabel.Text = item.FirstName;
lastNameLabel.Text = item.LastName;
cityLabel.Text = item.City;
stateLabel.Text = item.State;
}
}
}
[Preserve(AllMembers = true)]
class ListViewPage : ContentPage
{
ListView _ListView;
List<Person> _People = new List<Person>();
public ListViewPage(string id)
{
Title = $"List {id}";
for (var x = 0; x < 1000; x++)
{
_People.Add(new Person("Bob", "Bobson", "San Francisco", "California"));
}
_ListView = new ListView(ListViewCachingStrategy.RecycleElement) { ItemTemplate = new DataTemplate(typeof(ListViewCell)) };
Content = _ListView;
}
protected override void OnAppearing()
{
base.OnAppearing();
_ListView.ItemsSource = _People;
}
protected override void OnDisappearing()
{
base.OnDisappearing();
_ListView.ItemsSource = null;
}
}
protected override void Init()
{
var counter = 1;
for (var x = 0; x < 10; x++)
{
Children.Add(new ListViewPage(counter.ToString()));
counter++;
}
}
}
}
|