-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
Issue3089.cs
131 lines (110 loc) · 3.16 KB
/
Issue3089.cs
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows.Input;
using Xamarin.Forms.CustomAttributes;
using Xamarin.Forms.Internals;
#if UITEST
using Xamarin.UITest;
using NUnit.Framework;
using Xamarin.Forms.Core.UITests;
#endif
namespace Xamarin.Forms.Controls.Issues
{
[Preserve(AllMembers = true)]
[Issue(IssueTracker.Github, 3089, "TextCell text doesn't change when using Recycling on ListViews")]
#if UITEST
[NUnit.Framework.Category(Core.UITests.UITestCategories.Github5000)]
[NUnit.Framework.Category(UITestCategories.ListView)]
[NUnit.Framework.Category(UITestCategories.UwpIgnore)]
#endif
public class Issue3089 : TestNavigationPage
{
const string reload = "reload";
const string success = "success";
protected override void Init()
{
var oc = new ObservableCollection<string>(new[] { $"Click {reload}", "and this text should go away" });
Enumerable.Range(0, 100).ForEach(x => oc.Add(x.ToString()));
PushAsync(new MainPageCode
{
BindingContext = new MainViewModel
{
ViewModel1 = new ListViewModel
{
Items = oc
}
}
});
}
[Preserve(AllMembers = true)]
public partial class MainPageCode : TabbedPage
{
public MainPageCode()
{
ToolbarItems.Add(new Xamarin.Forms.ToolbarItem() { Text = "add1" });
ToolbarItems.Add(new Xamarin.Forms.ToolbarItem() { Text = "reload" });
ToolbarItems[0].SetBinding(ToolbarItem.CommandProperty, "Add1Command");
ToolbarItems[1].SetBinding(ToolbarItem.CommandProperty, "Add2Command");
ListPageCode page = new ListPageCode();
page.SetBinding(ListPageCode.BindingContextProperty, "ViewModel1");
Children.Add(page);
}
}
[Preserve(AllMembers = true)]
public class MainViewModel
{
void AddItems(ObservableCollection<string> list)
{
list.Add("new item");
list.Add(success);
}
public MainViewModel()
{
Add1Command = new Command(() => AddItems(ViewModel1.Items));
Add2Command = new Command(() =>
{
ViewModel1.ReloadData();
AddItems(ViewModel1.Items);
});
}
public ListViewModel ViewModel1 { get; set; }
public ICommand Add1Command { get; }
public ICommand Add2Command { get; }
}
[Preserve(AllMembers = true)]
public class ListViewModel : INotifyPropertyChanged
{
public ObservableCollection<string> Items { get; set; }
public bool IsVisible { get; set; } = true;
public event PropertyChangedEventHandler PropertyChanged;
public void ReloadData()
{
Items = new ObservableCollection<string>();
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Items)));
}
}
[Preserve(AllMembers = true)]
public partial class ListPageCode : ContentPage
{
public ListPageCode()
{
IconImageSource = "coffee.png";
ListView view = new ListView(ListViewCachingStrategy.RecycleElement);
Content = view;
view.SetBinding(ListView.ItemsSourceProperty, "Items");
}
}
#if UITEST
[Test]
public void ResettingItemsOnRecycledListViewKeepsOldText()
{
RunningApp.Tap(reload);
RunningApp.WaitForElement(success);
}
#endif
}
}