diff options
Diffstat (limited to 'Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla37841.cs')
-rw-r--r-- | Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla37841.cs | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla37841.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla37841.cs new file mode 100644 index 00000000..2a8e236a --- /dev/null +++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Bugzilla37841.cs @@ -0,0 +1,153 @@ +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using Xamarin.Forms.CustomAttributes; + +#if UITEST +using Xamarin.UITest; +using NUnit.Framework; +#endif + +namespace Xamarin.Forms.Controls +{ + [Preserve(AllMembers = true)] + [Issue(IssueTracker.Bugzilla, 37841, "TableView EntryCells and TextCells cease to update after focus change", PlatformAffected.Android)] + public class Bugzilla37841 : TestContentPage + { + _37841ViewModel _viewModel; + + protected override void Init () + { + _viewModel = new _37841ViewModel (); + + var instructions = new Label { FontSize = 16, Text = @"Click on the Generate button. +The EntryCell should display '12345' and the TextCell should display '6789'. +Click on the Generate button a second time. +The EntryCell should display '112358' and the TextCell should display '48151623'." }; + + var button = new Button { Text = "Generate" }; + button.SetBinding (Button.CommandProperty, nameof (_37841ViewModel.GetNextNumbersCommand)); + + var random1 = new EntryCell { IsEnabled = false, Label = "Entry Cell" }; + random1.SetBinding (EntryCell.TextProperty, nameof (_37841ViewModel.Value1)); + + var textCell = new TextCell { IsEnabled = false, Detail = "TextCell" }; + textCell.SetBinding (TextCell.TextProperty, nameof (_37841ViewModel.Value2)); + + var buttonViewCell = new ViewCell { View = button }; + + var section = new TableSection ("") { + random1, + textCell, + buttonViewCell + }; + + var root = new TableRoot { section }; + var tv = new TableView { Root = root }; + + Content = new StackLayout { + Children = { instructions, tv } + }; + + BindingContext = _viewModel; + } + + [Preserve (AllMembers = true)] + public class _37841ViewModel : INotifyPropertyChanged + { + public int Value1 + { + get { return _value1; } + set + { + if (value != _value1) { + _value1 = value; + RaisePropertyChanged (); + } + } + } + + public int Value2 + { + get { return _value2; } + set + { + if (value != _value2) { + _value2 = value; + RaisePropertyChanged (); + } + } + } + + public Command GetNextNumbersCommand + => _getNextNumbersCommand ?? (_getNextNumbersCommand = new Command (ExecuteGenerateRandomCommand)); + + class SomeNumbers : IEnumerable<int> + { + public IEnumerator<int> GetEnumerator () + { + while (true) { + yield return 12345; + yield return 6789; + yield return 112358; + yield return 48151623; + } + } + + IEnumerator IEnumerable.GetEnumerator () + { + return GetEnumerator (); + } + } + + readonly IEnumerator<int> _numberList = new SomeNumbers ().GetEnumerator (); + + void ExecuteGenerateRandomCommand () + { + _numberList.MoveNext (); + Value1 = _numberList.Current; + _numberList.MoveNext (); + Value2 = _numberList.Current; + } + + void RaisePropertyChanged ([CallerMemberName] string propertyName = null) + { + PropertyChangedEventHandler handler = PropertyChanged; + + handler?.Invoke (this, new PropertyChangedEventArgs (propertyName)); + } + + #region INotifyPropertyChanged implementation + + public event PropertyChangedEventHandler PropertyChanged; + + #endregion + + Command _getNextNumbersCommand; + int _value1; + int _value2; + } + +#if UITEST + [Test] + public void TextAndEntryCellsDataBindInTableView() + { + RunningApp.WaitForElement ("Generate"); + RunningApp.Tap("Generate"); + + RunningApp.Screenshot ("First Generate Tap"); + + RunningApp.WaitForElement("12345"); + RunningApp.WaitForElement("6789"); + + RunningApp.Tap("Generate"); + + RunningApp.Screenshot("Second Generate Tap"); + + RunningApp.WaitForElement("112358"); + RunningApp.WaitForElement("48151623"); + } +#endif + } +}
\ No newline at end of file |