[NUI] 1.Remove disposed instance from XamlResource; 2.Support BindingContext in EXaml
authorFang Xiaohui <xiaohui.fang@samsung.com>
Wed, 23 Jun 2021 09:44:21 +0000 (17:44 +0800)
committerSangHyeon Jade Lee <dltkdgus1764@gmail.com>
Mon, 5 Jul 2021 09:51:44 +0000 (18:51 +0900)
src/Tizen.NUI/src/internal/Application/Application.cs
src/Tizen.NUI/src/internal/Xaml/CreateValuesVisitor.cs
src/Tizen.NUI/src/public/XamlBinding/BindableObject.cs
src/Tizen.NUI/src/public/XamlBinding/Element.cs

index ab46101..df61a79 100755 (executable)
@@ -308,35 +308,12 @@ namespace Tizen.NUI
 
         public delegate void resChangeCb(object sender, ResourcesChangedEventArgs e);
 
-        static private Dictionary<object, Dictionary<resChangeCb, int>> resourceChangeCallbackDict = new Dictionary<object, Dictionary<resChangeCb, int>>();
-        static public void AddResourceChangedCallback(object handle, resChangeCb cb)
-        {
-            Dictionary<resChangeCb, int> cbDict;
-            resourceChangeCallbackDict.TryGetValue(handle, out cbDict);
-
-            if (null == cbDict)
-            {
-                cbDict = new Dictionary<resChangeCb, int>();
-                resourceChangeCallbackDict.Add(handle, cbDict);
-            }
-
-            if (false == cbDict.ContainsKey(cb))
-            {
-                cbDict.Add(cb, 0);
-            }
-        }
+        internal event EventHandler<ResourcesChangedEventArgs> XamlResourceChanged;
 
         internal override void OnResourcesChanged(object sender, ResourcesChangedEventArgs e)
         {
             base.OnResourcesChanged(sender, e);
-
-            foreach (KeyValuePair<object, Dictionary<resChangeCb, int>> resourcePair in resourceChangeCallbackDict)
-            {
-                foreach (KeyValuePair<resChangeCb, int> cbPair in resourcePair.Value)
-                {
-                    cbPair.Key(sender, e);
-                }
-            }
+            XamlResourceChanged?.Invoke(sender, e);
         }
 
         public ResourceDictionary XamlResources
index b0e4c19..9423cd1 100755 (executable)
@@ -159,17 +159,14 @@ namespace Tizen.NUI.Xaml
 
                             value = Activator.CreateInstance(type, defaultParams.ToArray());
                         }
-                        if (value is Element)
+                        if (value is Element element)
                         {
                             if (null != Application.Current)
                             {
-                                Application.AddResourceChangedCallback(value, (value as Element).OnResourcesChanged);
+                                Application.Current.XamlResourceChanged += element.OnResourcesChanged;
                             }
 
-                            if (value is BindableObject)
-                            {
-                                ((BindableObject)value).IsCreateByXaml = true;
-                            }
+                            element.IsCreateByXaml = true;
                         }
                     }
                 }
@@ -287,17 +284,14 @@ namespace Tizen.NUI.Xaml
             {
                 //non-default ctor
                 object ret = Activator.CreateInstance(nodeType, BindingFlags.CreateInstance | BindingFlags.Public | BindingFlags.Instance | BindingFlags.OptionalParamBinding, null, arguments, CultureInfo.CurrentCulture);
-                if (ret is Element)
+                if (ret is Element element)
                 {
                     if (null != Application.Current)
                     {
-                        Application.AddResourceChangedCallback(ret, (ret as Element).OnResourcesChanged);
+                        Application.Current.XamlResourceChanged += element.OnResourcesChanged;
                     }
 
-                    if (ret is BindableObject)
-                    {
-                        ((BindableObject)ret).IsCreateByXaml = true;
-                    }
+                    element.IsCreateByXaml = true;
                 }
                 return ret;
             }
@@ -418,17 +412,14 @@ namespace Tizen.NUI.Xaml
             else
             {
                 value = Activator.CreateInstance(nodeType);
-                if (value is Element)
+                if (value is Element element)
                 {
                     if (null != Application.Current)
                     {
-                        Application.AddResourceChangedCallback(value, (value as Element).OnResourcesChanged);
+                        Application.Current.XamlResourceChanged += element.OnResourcesChanged;
                     }
 
-                    if (value is BindableObject)
-                    {
-                        ((BindableObject)value).IsCreateByXaml = true;
-                    }
+                    element.IsCreateByXaml = true;
                 }
             }
 
index 714e5ed..f8d9ec2 100755 (executable)
@@ -43,6 +43,11 @@ namespace Tizen.NUI.Binding
                 {
                     bindableObject.bindingContext = newValue;
                     bindableObject.FlushBinding();
+
+                    if (newValue is BindableObject targetBindableObject)
+                    {
+                        targetBindableObject.IsCreateByXaml = true;
+                    }
                 }
             }),
             defaultValueCreator: (BindableProperty.CreateDefaultValueDelegate)((bindable) =>
index 9eb3f39..ea7c48a 100755 (executable)
@@ -515,7 +515,10 @@ namespace Tizen.NUI.Binding
             if (this.TryGetResource(key, out value))
                 OnResourceChanged(property, value);
 
-            Tizen.NUI.Application.AddResourceChangedCallback(this, (this as Element).OnResourcesChanged);
+            if (null != Application.Current)
+            {
+                Application.Current.XamlResourceChanged += OnResourcesChanged;
+            }
         }
 
         internal event EventHandler ParentSet;