[EXaml] Refactor EXaml
[platform/core/csapi/tizenfx.git] / src / Tizen.NUI / src / internal / EXaml / Operation / AddEvent.cs
index 2202292..a444926 100755 (executable)
@@ -26,12 +26,12 @@ namespace Tizen.NUI.EXaml
 {
     internal class AddEvent : Operation
     {
-        public AddEvent(GlobalDataList globalDataList, int instanceIndex, int elementIndex, int eventIndex, int valueIndex)
+        public AddEvent(GlobalDataList globalDataList, List<object> operationInfo)
         {
-            this.instanceIndex = instanceIndex;
-            this.elementIndex = elementIndex;
-            this.eventIndex = eventIndex;
-            this.valueIndex = valueIndex;
+            instanceIndex = (int)operationInfo[0];
+            elementIndex = (int)operationInfo[1];
+            eventIndex = (int)operationInfo[2];
+            valueIndex = (int)operationInfo[3];
             this.globalDataList = globalDataList;
         }
 
@@ -45,7 +45,26 @@ namespace Tizen.NUI.EXaml
             try
             {
                 var methodInfo = globalDataList.GatheredMethods[valueIndex];
-                eventInfo.AddEventHandler(instance, methodInfo.CreateDelegate(eventInfo.EventHandlerType, element));
+                Delegate eventDelegate = null;
+
+                if (methodInfo.IsStatic)
+                {
+                    eventDelegate = methodInfo.CreateDelegate(eventInfo.EventHandlerType);
+                }
+                else
+                {
+                    eventDelegate = methodInfo.CreateDelegate(eventInfo.EventHandlerType, element);
+                }
+
+                if (null != eventDelegate)
+                {
+                    eventInfo.AddEventHandler(instance, eventDelegate);
+                    globalDataList.RemoveEventOperations.Add(new RemoveEvent(eventDelegate, instance, eventInfo));
+                }
+                else
+                {
+                    throw new Exception($"Can't create delegate for method {methodInfo.DeclaringType.FullName}.{methodInfo.Name}");
+                }
             }
             catch (ArgumentException ae)
             {