示例#1
0
        /// <summary>
        /// Realize indexed item.
        /// </summary>
        /// <param name="index"> Index position of realizing item </param>
        internal virtual RecyclerViewItem RealizeItem(int index)
        {
            object context = InternalItemSource.GetItem(index);

            // Check DataTemplate is Same!
            if (ItemTemplate is DataTemplateSelector)
            {
                // Need to implements for caching of selector!
            }
            else
            {
                // pop item
                RecyclerViewItem item = PopRecycleCache(ItemTemplate);
                if (item != null)
                {
                    DecorateItem(item, index, context);
                    return(item);
                }
            }

            object content = DataTemplateExtensions.CreateContent(ItemTemplate, context, (BindableObject)this) ?? throw new Exception("Template return null object.");

            if (content is RecyclerViewItem)
            {
                RecyclerViewItem item = (RecyclerViewItem)content;
                ContentContainer.Add(item);
                DecorateItem(item, index, context);
                return(item);
            }
            else
            {
                throw new Exception("Template content must be type of ViewItem");
            }
        }
示例#2
0
        public void DataTemplateExtensionsCreateContent()
        {
            tlog.Debug(tag, $"DataTemplateExtensionsCreateContent START");

            var testingTarget = new MyDataTemplateSelector();

            try
            {
                DataTemplateExtensions.CreateContent(testingTarget, View.Property.STATE, new View());
            }
            catch (Exception e)
            {
                tlog.Debug(tag, e.Message.ToString());
                Assert.Fail("CreateContent Fail!");
            }

            tlog.Debug(tag, $"DataTemplateExtensionsCreateContent END (OK)");
        }
示例#3
0
        public void DataTemplateSelectorSelectTemplateWithNullLoadTemplate()
        {
            tlog.Debug(tag, $"DataTemplateSelectorSelectTemplateWithNullLoadTemplate START");

            var testingTarget = new MyDataTemplateSelector();

            try
            {
                DataTemplateExtensions.CreateContent(testingTarget, "Color", new View());
            }
            catch (NotSupportedException e)
            {
                tlog.Debug(tag, e.Message.ToString());
                tlog.Debug(tag, $"DataTemplateSelectorSelectTemplateWithNullLoadTemplate END (OK)");
                Assert.Pass("Caught NotSupportedException: Pass!");
            }

            tlog.Debug(tag, $"DataTemplateSelectorSelectTemplateWithNullLoadTemplate END (OK)");
        }
示例#4
0
        public void DataTemplateExtensionsCreateContentWithNullSelector()
        {
            tlog.Debug(tag, $"DataTemplateExtensionsCreateContentWithNullSelector START");

            Func <object> LoadTemplate  = () => new View();
            var           testingTarget = new DataTemplate(LoadTemplate);

            try
            {
                DataTemplateExtensions.CreateContent(testingTarget, View.Property.STATE, new View());
            }
            catch (Exception e)
            {
                tlog.Debug(tag, e.Message.ToString());
                Assert.Fail("CreateContent Fail!");
            }

            tlog.Debug(tag, $"DataTemplateExtensionsCreateContentWithNullSelector END (OK)");
        }
示例#5
0
        public void ElementTemplateConstructorWithNullLoadTemplate()
        {
            tlog.Debug(tag, $"ElementTemplateConstructorWithNullLoadTemplate START");

            try
            {
                var testingTarget = new MyDataTemplateSelector();

                View view = new View()
                {
                    Color = Color.Cyan,
                };

                DataTemplateExtensions.CreateContent(testingTarget, View.Property.STATE, view);
            }
            catch (ArgumentNullException e)
            {
                tlog.Debug(tag, $"ElementTemplateConstructorWithNullLoadTemplate END (OK)");
                tlog.Debug(tag, e.Message.ToString());
                Assert.Pass("Caught ArgumentNullException: Pass!");
            }
        }
        /// <summary>
        /// Prepare a PrepareHeaderedItemsControlContainer container for an
        /// item.
        /// </summary>
        /// <param name="control">Container to prepare.</param>
        /// <param name="item">Item to be placed in the container.</param>
        /// <param name="parentItemsControl">The parent ItemsControl.</param>
        /// <param name="parentItemContainerStyle">
        /// The ItemContainerStyle for the parent ItemsControl.
        /// </param>
        private static void PrepareHeaderedItemsControlContainer(HeaderedItemsControl control, object item, ItemsControl parentItemsControl, Style parentItemContainerStyle)
        {
            if (control != item)
            {
                // Copy the ItemsControl properties from parent to child
                DataTemplate parentItemTemplate = parentItemsControl.ItemTemplate;
                if (parentItemTemplate != null)
                {
                    control.SetValue(HeaderedItemsControl.ItemTemplateProperty, parentItemTemplate);
                }
                if (parentItemContainerStyle != null && HasDefaultValue(control, HeaderedItemsControl.ItemContainerStyleProperty))
                {
                    control.SetValue(HeaderedItemsControl.ItemContainerStyleProperty, parentItemContainerStyle);
                }

                // Copy the Header properties from parent to child
                if (control.HeaderIsItem || HasDefaultValue(control, HeaderedItemsControl.HeaderProperty))
                {
                    control.Header       = item;
                    control.HeaderIsItem = true;
                }
                if (parentItemTemplate != null)
                {
                    control.SetValue(HeaderedItemsControl.HeaderTemplateProperty, parentItemTemplate);
                }
                if (parentItemContainerStyle != null && control.Style == null)
                {
                    control.SetValue(HeaderedItemsControl.StyleProperty, parentItemContainerStyle);
                }

                // Note: this is where we would apply the HeaderTemplateSelector
                // (if implemented) or attempt to lookup the implicit template
                // for the type of the item if the headerTemplate were null.

                // Setup a hierarchical template
                //HierarchicalDataTemplate headerTemplate = parentItemTemplate as HierarchicalDataTemplate;
                var headerTemplate = parentItemTemplate as DataTemplate;
                if (headerTemplate != null)
                {
                    var hierarchy = DataTemplateExtensions.GetHierarchy(headerTemplate);

                    if (hierarchy != null &&
                        hierarchy.ItemsSource != null &&
                        HasDefaultValue(control, HeaderedItemsControl.ItemsSourceProperty))
                    {
                        control.SetBinding(
                            HeaderedItemsControl.ItemsSourceProperty,
                            new Binding
                        {
                            Converter          = hierarchy.ItemsSource.Converter,
                            ConverterLanguage  = hierarchy.ItemsSource.ConverterLanguage,
                            ConverterParameter = hierarchy.ItemsSource.ConverterParameter,
                            Mode = hierarchy.ItemsSource.Mode,
                            //NotifyOnValidationError = headerTemplate.ItemsSource.NotifyOnValidationError,
                            Path   = hierarchy.ItemsSource.Path,
                            Source = control.Header,
                            //ElementName =
                            //ValidatesOnExceptions = headerTemplate.ItemsSource.ValidatesOnExceptions
                        });
                    }
                    if (hierarchy != null &&
                        hierarchy.IsItemTemplateSet &&
                        control.ItemTemplate == parentItemTemplate)
                    {
                        control.ClearValue(HeaderedItemsControl.ItemTemplateProperty);
                        if (hierarchy.ItemTemplate != null)
                        {
                            control.ItemTemplate = hierarchy.ItemTemplate;
                        }
                    }
                    if (hierarchy != null &&
                        hierarchy.IsItemContainerStyleSet &&
                        control.ItemContainerStyle == parentItemContainerStyle)
                    {
                        control.ClearValue(HeaderedItemsControl.ItemContainerStyleProperty);
                        if (hierarchy.ItemContainerStyle != null)
                        {
                            control.ItemContainerStyle = hierarchy.ItemContainerStyle;
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Prepare a PrepareHeaderedItemsControlContainer container for an
        /// item.
        /// </summary>
        /// <param name="control">Container to prepare.</param>
        /// <param name="item">Item to be placed in the container.</param>
        /// <param name="parentItemsControl">The parent ItemsControl.</param>
        /// <param name="parentItemContainerStyle">
        /// The ItemContainerStyle for the parent ItemsControl.
        /// </param>
        private static void PrepareHeaderedItemsControlContainer(HeaderedItemsControl control, object item, ItemsControl parentItemsControl, Style parentItemContainerStyle)
        {
            try
            {
                if (control != item)
                {
                    // Copy the ItemsControl properties from parent to child
                    DataTemplate         parentItemTemplate         = parentItemsControl.ItemTemplate;
                    DataTemplateSelector parentItemTemplateSelector = parentItemsControl.ItemTemplateSelector;

                    if (parentItemTemplateSelector != null)
                    {
                        control.SetValue(HeaderedItemsControl.ItemTemplateSelectorProperty, parentItemTemplateSelector);
                        parentItemTemplate = parentItemTemplateSelector.SelectTemplate(item, control);
                    }
                    else if (parentItemTemplate != null)
                    {
                        control.SetValue(HeaderedItemsControl.ItemTemplateProperty, parentItemTemplate);
                    }

                    if (parentItemContainerStyle != null && HasDefaultValue(control, HeaderedItemsControl.ItemContainerStyleProperty))
                    {
                        control.SetValue(HeaderedItemsControl.ItemContainerStyleProperty, parentItemContainerStyle);
                    }

                    // Copy the Header properties from parent to child
                    if (control.HeaderIsItem || HasDefaultValue(control, HeaderedItemsControl.HeaderProperty))
                    {
                        control.Header       = item;
                        control.HeaderIsItem = true;
                    }

                    if (parentItemTemplate != null)
                    {
                        control.SetValue(HeaderedItemsControl.HeaderTemplateProperty, parentItemTemplate);
                    }

                    if (parentItemContainerStyle != null && control.Style == null)
                    {
                        control.SetValue(HeaderedItemsControl.StyleProperty, parentItemContainerStyle);
                    }

                    // Note: this is where we would apply the HeaderTemplateSelector
                    // (if implemented) or attempt to lookup the implicit template
                    // for the type of the item if the headerTemplate were null.

                    // Setup a hierarchical template
                    //HierarchicalDataTemplate headerTemplate = parentItemTemplate as HierarchicalDataTemplate;
                    var headerTemplate = parentItemTemplate as DataTemplate;

                    if (headerTemplate != null)
                    {
                        var hierarchy = DataTemplateExtensions.GetHierarchy(headerTemplate);

                        if (hierarchy != null &&
                            hierarchy.ItemsSource != null &&
                            HasDefaultValue(control, HeaderedItemsControl.ItemsSourceProperty))
                        {
                            control.SetBinding(
                                HeaderedItemsControl.ItemsSourceProperty,
                                new Binding
                            {
                                Converter          = hierarchy.ItemsSource.Converter,
                                ConverterLanguage  = hierarchy.ItemsSource.ConverterLanguage,
                                ConverterParameter = hierarchy.ItemsSource.ConverterParameter,
                                Mode = hierarchy.ItemsSource.Mode,
                                //NotifyOnValidationError = headerTemplate.ItemsSource.NotifyOnValidationError,
                                Path   = hierarchy.ItemsSource.Path,
                                Source = control.Header,
                                //ElementName =
                                //ValidatesOnExceptions = headerTemplate.ItemsSource.ValidatesOnExceptions
                            });
                        }

                        if (hierarchy != null &&
                            hierarchy.IsItemTemplateSet &&
                            control.ItemTemplate == parentItemTemplate)
                        {
                            control.ClearValue(HeaderedItemsControl.ItemTemplateProperty);

                            if (hierarchy.ItemTemplate != null)
                            {
                                control.ItemTemplate = hierarchy.ItemTemplate;
                            }
                        }

                        if (hierarchy != null &&
                            hierarchy.IsItemContainerStyleSet &&
                            control.ItemContainerStyle == parentItemContainerStyle)
                        {
                            control.ClearValue(HeaderedItemsControl.ItemContainerStyleProperty);

                            if (hierarchy.ItemContainerStyle != null)
                            {
                                control.ItemContainerStyle = hierarchy.ItemContainerStyle;
                            }
                        }
                    }
                }
            }
            catch (COMException)
            {
                Debug.Assert(false, "Due to some change in the platform in Windows 10 - you now need to set the ItemTemplate before setting the ItemsSource when using a TreeView.");
            }
        }