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
108
109
110
111
112
113
114
115
116
117
|
using System;
using Xamarin.Forms;
using System.Collections.Generic;
using Xamarin.Forms.CustomAttributes;
using Xamarin.Forms.Internals;
#if UITEST
using NUnit.Framework;
using Xamarin.UITest;
#endif
namespace Xamarin.Forms.Controls.Issues
{
[Preserve (AllMembers = true)]
[Issue(IssueTracker.Github, 2354, "ListView, ImageCell and disabled source cache and same image url",PlatformAffected.iOS | PlatformAffected.Android)]
public class Issue2354 : TestContentPage
{
protected override void Init ()
{
var presidents = new List<President> ();
for (int i = 0; i < 10; i++) {
presidents.Add (new President ($"Presidente {44 - i}", 1, $"http://static.c-span.org/assets/images/series/americanPresidents/{43 - i}_400.png"));
}
var header = new Label {
Text = "Presidents",
HorizontalOptions = LayoutOptions.Center
};
var cell = new DataTemplate (typeof(CustomCell));
var listView = new ListView {
ItemsSource = presidents,
ItemTemplate = cell,
RowHeight = 200
};
Content = new StackLayout {
Children = {
header,
listView
}
};
}
public class President
{
public President (string name, int position, string image)
{
Name = name;
Position = position;
Image = image;
}
public string Name { private set; get; }
public int Position { private set; get; }
public string Image { private set; get; }
}
[Preserve (AllMembers = true)]
public class CustomCell : ViewCell
{
public CustomCell()
{
var image = new Image
{
HorizontalOptions = LayoutOptions.Start,
Aspect = Aspect.AspectFill
};
var source = new UriImageSource {
CachingEnabled = false,
};
source.SetBinding(UriImageSource.UriProperty, new Binding("Image", converter: new UriConverter()));
image.Source = source;
View = image;
}
}
public class UriConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return new Uri((string) value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
#if UITEST
[Test]
public void TestDoesntCrashWithCachingDisable ()
{
RunningApp.ScrollDown ();
RunningApp.ScrollDown ();
}
#endif
}
}
|