2 using System.Collections.Generic;
3 using Tizen.NUI.XamlBinding.Internals;
5 namespace Tizen.NUI.XamlBinding
8 /// Base class for DataTemplate and ControlTemplate classes.
10 internal class ElementTemplate : IElement, IDataTemplate
12 List<Action<object, ResourcesChangedEventArgs>> _changeHandlers;
14 bool _canRecycle; // aka IsDeclarative
16 internal ElementTemplate()
20 internal ElementTemplate(Type type) : this()
23 throw new ArgumentNullException("type");
27 LoadTemplate = () => Activator.CreateInstance(type);
30 internal ElementTemplate(Func<object> loadTemplate) : this()
32 if (loadTemplate == null)
33 throw new ArgumentNullException("loadTemplate");
35 LoadTemplate = loadTemplate;
38 Func<object> LoadTemplate { get; set; }
40 #pragma warning disable 0612
41 Func<object> IDataTemplate.LoadTemplate
43 get { return LoadTemplate; }
44 set { LoadTemplate = value; }
46 #pragma warning restore 0612
48 void IElement.AddResourcesChangedListener(Action<object, ResourcesChangedEventArgs> onchanged)
50 _changeHandlers = _changeHandlers ?? new List<Action<object, ResourcesChangedEventArgs>>(1);
51 _changeHandlers.Add(onchanged);
54 internal bool CanRecycle => _canRecycle;
55 Element IElement.Parent
57 get { return _parent; }
63 ((IElement)_parent).RemoveResourcesChangedListener(OnResourcesChanged);
66 ((IElement)_parent).AddResourcesChangedListener(OnResourcesChanged);
70 void IElement.RemoveResourcesChangedListener(Action<object, ResourcesChangedEventArgs> onchanged)
72 if (_changeHandlers == null)
74 _changeHandlers.Remove(onchanged);
78 /// Used by the XAML infrastructure to load data templates and set up the content of the resulting UI.
80 /// <returns></returns>
81 public object CreateContent()
83 if (LoadTemplate == null)
84 throw new InvalidOperationException("LoadTemplate should not be null");
85 if (this is DataTemplateSelector)
86 throw new InvalidOperationException("Cannot call CreateContent directly on a DataTemplateSelector");
88 object item = LoadTemplate();
94 internal virtual void SetupContent(object item)
98 void OnResourcesChanged(object sender, ResourcesChangedEventArgs e)
100 if (_changeHandlers == null)
102 foreach (Action<object, ResourcesChangedEventArgs> handler in _changeHandlers)