Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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 });
        }
Exemplo n.º 3
0
        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);
        }