/// <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"); } }
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)"); }
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)"); }
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)"); }
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."); } }