IsPlatformEnabled = true,
};
- var itemsSource = new ObservableCollection<int>();
+ var itemsSource = new ObservableCollection<int>() { 0, 1, 2, 3, 4 };
BindableLayout.SetItemsSource(layout, itemsSource);
- itemsSource.Insert(0, 1);
+ itemsSource.Insert(2, 5);
Assert.IsTrue(IsLayoutWithItemsSource(itemsSource, layout));
}
OnPropertyChanged(new PropertyChangedEventArgs("Item[]"));
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, changedItems, 0));
}
- }
-
+ }
+
class MyDataTemplateSelectorTest : DataTemplateSelector
{
readonly Func<object, BindableObject, DataTemplate> _func;
using System;
using System.Collections;
using System.Collections.Specialized;
+using Xamarin.Forms.Internals;
namespace Xamarin.Forms
{
int i = 0;
foreach (object item in _itemsSource)
{
- layout.Children.Add(CreateItemView(item, i++, layout));
+ layout.Children.Add(CreateItemView(item, layout));
}
}
- View CreateItemView(object item, int index, Layout<View> layout)
+ View CreateItemView(object item, Layout<View> layout)
{
- return CreateItemView(item, index, _itemTemplate ?? _itemTemplateSelector?.SelectTemplate(item, layout));
+ return CreateItemView(item, _itemTemplate ?? _itemTemplateSelector?.SelectTemplate(item, layout));
}
- View CreateItemView(object item, int index, DataTemplate dataTemplate)
+ View CreateItemView(object item, DataTemplate dataTemplate)
{
if (dataTemplate != null)
{
return;
}
- switch (e.Action)
- {
- case NotifyCollectionChangedAction.Add:
- {
- if (e.NewStartingIndex == -1)
- goto case NotifyCollectionChangedAction.Reset;
- int i = e.NewStartingIndex;
- foreach (object item in e.NewItems)
- {
- layout.Children.Add(CreateItemView(item, i++, layout));
- }
- }
- break;
- case NotifyCollectionChangedAction.Remove:
- {
- if (e.OldStartingIndex == -1)
- goto case NotifyCollectionChangedAction.Reset;
- for (int i = 0; i < e.OldItems.Count; i++)
- {
- layout.Children.RemoveAt(e.OldStartingIndex);
- }
- }
- break;
- case NotifyCollectionChangedAction.Replace:
- {
- if (e.OldStartingIndex == -1)
- goto case NotifyCollectionChangedAction.Reset;
- int i = e.NewStartingIndex;
- foreach (object item in e.NewItems)
- {
- layout.Children[i] = CreateItemView(item, i, layout);
- ++i;
- }
- }
- break;
- case NotifyCollectionChangedAction.Move:
- {
- if (e.OldStartingIndex == -1 || e.NewStartingIndex == -1)
- goto case NotifyCollectionChangedAction.Reset;
- for (int i = 0; i < e.NewItems.Count; ++i)
- {
- int iFrom = e.OldStartingIndex + i;
- int iTo = e.NewStartingIndex + i;
- View fromView = layout.Children[iFrom];
- View toView = layout.Children[iTo];
- layout.Children.Remove(fromView);
- layout.Children.Remove(toView);
- layout.Children.Insert(iFrom, toView);
- layout.Children.Insert(iTo, fromView);
- }
- }
- break;
-
- case NotifyCollectionChangedAction.Reset:
- layout.Children.Clear();
- break;
- }
+ e.Apply(
+ insert: (item, index, _) => layout.Children.Insert(index, CreateItemView(item, layout)),
+ removeAt: (item, index) => layout.Children.RemoveAt(index),
+ reset: CreateChildren);
}
}
-}
+}
\ No newline at end of file