public void ValidateGetSetItemsSource() { RunOnUIThread.Execute(() => { ItemsRepeater repeater = new ItemsRepeater(); var dataSource = new ItemsSourceView(Enumerable.Range(0, 10).Select(i => string.Format("Item #{0}", i))); repeater.SetValue(ItemsRepeater.ItemsSourceProperty, dataSource); Verify.AreSame(dataSource, repeater.GetValue(ItemsRepeater.ItemsSourceProperty) as ItemsSourceView); Verify.AreSame(dataSource, repeater.ItemsSourceView); }); }
public void ValidateGetElementAtCachingForLayout() { List <int> data = Enumerable.Range(0, 15).ToList(); ItemsSourceView dataSource = null; RunOnUIThread.Execute(() => dataSource = new ItemsSourceView(data)); ScrollViewer scrollViewer = null; var repeater = SetupRepeater(dataSource, null /*layout*/, out scrollViewer); bool layoutRan = false; RunOnUIThread.Execute(() => { var layout = new MockVirtualizingLayout(); layout.MeasureLayoutFunc = (availableSize, context) => { Verify.AreEqual(15, context.ItemCount); var element0 = context.GetOrCreateElementAt(0); Verify.IsNotNull(element0); var element1 = context.GetOrCreateElementAt(1); Verify.IsNotNull(element1); Verify.AreNotSame(element0, element1); var element1again = context.GetOrCreateElementAt(1); Verify.AreSame(element1, element1again); var element10 = context.GetOrCreateElementAt(10); Verify.IsNotNull(element10); Verify.AreNotSame(element0, element10); Verify.AreNotSame(element1, element10); context.RecycleElement(element1); var element0New = context.GetOrCreateElementAt(0); Verify.AreSame(element0, element0New); context.RecycleElement(element10); context.RecycleElement(element0); layoutRan = true; return(new Size(10, 10)); }; repeater.Layout = layout; repeater.UpdateLayout(); Verify.IsTrue(layoutRan); }); IdleSynchronizer.Wait(); }
public void ValidateElementClearingOrderFromFlowLayout() { ItemsSourceView dataSource = null; RunOnUIThread.Execute(() => dataSource = new ItemsSourceView(Enumerable.Range(0, 15).ToList())); ScrollViewer scrollViewer = null; var repeater = SetupRepeater(dataSource, null /*layout*/, out scrollViewer); List <int> clearedIndices = new List <int>(); var viewChangedEvent = new ManualResetEvent(false); RunOnUIThread.Execute(() => { scrollViewer.ViewChanged += (sender, args) => { if (!args.IsIntermediate) { viewChangedEvent.Set(); } }; repeater.Layout = new StackLayout(); repeater.ElementPrepared += (sender, args) => { ((FrameworkElement)args.Element).Height = 20; }; repeater.UpdateLayout(); repeater.ElementClearing += (sender, args) => { int index = repeater.GetElementIndex(args.Element); Log.Comment("Clearing.." + index); clearedIndices.Add(index); }; scrollViewer.ChangeView(null, 100.0, null, disableAnimation: true); }); Verify.IsTrue(viewChangedEvent.WaitOne(DefaultWaitTime), "Waiting for ViewChanged."); IdleSynchronizer.Wait(); RunOnUIThread.Execute(() => { // Validate order is 0, 1, 2, 3 for (int i = 0; i < 4; i++) { Verify.AreEqual(i, clearedIndices[i]); } clearedIndices.Clear(); viewChangedEvent.Reset(); scrollViewer.ChangeView(null, 0.0, null, disableAnimation: true); }); Verify.IsTrue(viewChangedEvent.WaitOne(DefaultWaitTime), "Waiting for ViewChanged."); IdleSynchronizer.Wait(); RunOnUIThread.Execute(() => { // Validate order is backwards 14, 13, 12, 11 for (int i = 0; i < 4; i++) { Verify.AreEqual(14 - i, clearedIndices[i]); } }); }