private int ReplaceListRangeBySource(int index, int count, IEnumerable source) { var array = new TemplatedItem <T> [1]; var enumerator = source.GetEnumerator(); var list = GetList(); var replacedCount = 0; while (replacedCount < count && enumerator.MoveNext()) { DataTemplate selected; var item = enumerator.Current; if (_template is DataTemplateSelector selector) { selected = selector.SelectTemplate(item, container); } else { selected = _template; } if (index < list.Count) { var templated = list[index]; if (templated.Template == selected) { templated.Content.BindingContext = item; } else { templated.Template = selected; templated.Content = (T)selected.CreateContent(); templated.Content.BindingContext = item; array[0] = templated; ReplaceListRange(index, 1, array); } } else { var templated = new TemplatedItem <T>(); templated.Template = selected; templated.Content = (T)selected.CreateContent(); templated.Content.BindingContext = item; array[0] = templated; InsertListRange(index, array); } replacedCount++; index++; } return(replacedCount); }
public void Add(T content) { if (IsReadOnly) { throw new Exception("this collection is read-only"); } var item = new TemplatedItem <T>(); item.Content = content; InsertListRange(GetList().Count, new[] { item }); }
private TemplatedItem <T> Template(object source) { var item = new TemplatedItem <T>(); if (_template is DataTemplateSelector selector) { item.Template = selector.SelectTemplate(source, container); } else { item.Template = _template; } item.Content = (T)item.Template.CreateContent(); item.Content.BindingContext = source; return(item); }