[NUI] Sync with dalihub (#693)
authordongsug-song <35130733+dongsug-song@users.noreply.github.com>
Wed, 30 Jan 2019 00:10:09 +0000 (09:10 +0900)
committerGitHub <noreply@github.com>
Wed, 30 Jan 2019 00:10:09 +0000 (09:10 +0900)
21 files changed:
src/Tizen.NUI/src/internal/Application.cs
src/Tizen.NUI/src/internal/NDalicPINVOKE.cs
src/Tizen.NUI/src/internal/WebView.cs
src/Tizen.NUI/src/internal/Xaml/CreateValuesVisitor.cs
src/Tizen.NUI/src/internal/Xaml/MarkupExtensions/StyleSheetExtension.cs
src/Tizen.NUI/src/internal/Xaml/PruneIgnoredNodesVisitor.cs
src/Tizen.NUI/src/internal/Xaml/XamlParser.cs
src/Tizen.NUI/src/internal/XamlBinding/Application.cs
src/Tizen.NUI/src/internal/XamlBinding/ObservableWrapper.cs
src/Tizen.NUI/src/internal/XamlBinding/ResourcesExtensions.cs
src/Tizen.NUI/src/internal/XamlBinding/Setter.cs
src/Tizen.NUI/src/internal/XamlBinding/StyleSheets/StyleSheetExtensions.cs
src/Tizen.NUI/src/public/BaseComponents/TextField.cs
src/Tizen.NUI/src/public/BaseComponents/TextLabel.cs
src/Tizen.NUI/src/public/BaseComponents/View.cs
src/Tizen.NUI/src/public/BaseHandle.cs
src/Tizen.NUI/src/public/ImfManager.cs
src/Tizen.NUI/src/public/Layer.cs
src/Tizen.NUI/src/public/NUIApplication.cs
src/Tizen.NUI/src/public/Window.cs
src/Tizen.NUI/src/public/XamlBinding/ResourceDictionary.cs

index e44d802..e1059d0 100755 (executable)
@@ -683,7 +683,7 @@ namespace Tizen.NUI
             await SaveSemaphore.WaitAsync();
             try
             {
-                await DependencyService.Get<IDeserializer>().SerializePropertiesAsync(Properties);
+                await DependencyService.Get<IDeserializer>()?.SerializePropertiesAsync(Properties);
             }
             finally
             {
@@ -1327,12 +1327,15 @@ namespace Tizen.NUI
         // Callback for Application BatteryLowSignal
         private void OnNUIApplicationBatteryLow(BatteryStatus status)
         {
+            lock (this)
+            {
             NUIApplicationBatteryLowEventArgs e = new NUIApplicationBatteryLowEventArgs();
 
             // Populate all members of "e" (NUIApplicationBatteryLowEventArgs) with real data
             e.BatteryStatus = status;
             _applicationBatteryLowEventHandler?.Invoke(this, e);
         }
+        }
 
         /**
           * @brief Event for MemoryLow signal which can be used to subscribe/unsubscribe the event handler
@@ -1372,12 +1375,15 @@ namespace Tizen.NUI
         // Callback for Application MemoryLowSignal
         private void OnNUIApplicationMemoryLow(MemoryStatus status)
         {
+            lock (this)
+            {
             NUIApplicationMemoryLowEventArgs e = new NUIApplicationMemoryLowEventArgs();
 
             // Populate all members of "e" (NUIApplicationMemoryLowEventArgs) with real data
             e.MemoryStatus = status;
             _applicationMemoryLowEventHandler?.Invoke(this, e);
         }
+        }
 
         /**
           * @brief Event for AppControl signal which can be used to subscribe/unsubscribe the event handler
index 73a9e45..1ddf841 100755 (executable)
@@ -6592,7 +6592,6 @@ namespace Tizen.NUI
         [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint = "CSharp_Dali_new_FrameBufferImage__SWIG_1")]
         public static extern global::System.IntPtr new_FrameBufferImage__SWIG_1(global::System.Runtime.InteropServices.HandleRef jarg1);
 
-
         [global::System.Runtime.InteropServices.DllImport("libdali-csharp-binder.so", EntryPoint = "CSharp_Dali_FrameBufferImage_Assign")]
         public static extern global::System.IntPtr FrameBufferImage_Assign(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2);
 
index d559ce6..3702b63 100755 (executable)
@@ -159,12 +159,14 @@ namespace Tizen.NUI
         /// <summary>
         /// Event arguments that passed via the webview signal.
         /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
         public class WebViewEventArgs : EventArgs
         {
             private WebView _webView;
             /// <summary>
             /// The view for displaying webpages.
             /// </summary>
+            [EditorBrowsable(EditorBrowsableState.Never)]
             public WebView WebView
             {
                 get
@@ -181,6 +183,7 @@ namespace Tizen.NUI
             /// <summary>
             /// The url string of current webpage.
             /// </summary>
+            [EditorBrowsable(EditorBrowsableState.Never)]
             public string PageUrl
             {
                 get
index c148a6b..1d5ce18 100755 (executable)
@@ -175,7 +175,7 @@ namespace Tizen.NUI.Xaml
             {
                 // Modify the namespace
                 var propname =
-                    parameter.CustomAttributes.First(ca => ca.AttributeType.FullName == "Tizen.NUI.Binding.ParameterAttribute")
+                    parameter.CustomAttributes.First(ca => ca.AttributeType.FullName == "Tizen.NUI.Binding.ParameterAttribute")?
                         .ConstructorArguments.First()
                         .Value as string;
                 if (!node.Properties.ContainsKey(new XmlName("", propname)))
@@ -197,7 +197,7 @@ namespace Tizen.NUI.Xaml
                             ci.GetParameters().Length != 0 && ci.IsPublic &&
                             ci.GetParameters().All(pi => pi.CustomAttributes.Any(attr => attr.AttributeType == typeof (ParameterAttribute))));
             object[] arguments = CreateArgumentsArray(node, ctorInfo);
-            return ctorInfo.Invoke(arguments);
+            return ctorInfo?.Invoke(arguments);
         }
 
         public object CreateFromFactory(Type nodeType, IElementNode node)
@@ -283,7 +283,7 @@ namespace Tizen.NUI.Xaml
             {
                 var parameter = ctorInfo.GetParameters()[i];
                 var propname =
-                    parameter.CustomAttributes.First(attr => attr.AttributeType == typeof (ParameterAttribute))
+                    parameter?.CustomAttributes?.First(attr => attr.AttributeType == typeof (ParameterAttribute))?
                         .ConstructorArguments.First()
                         .Value as string;
                 var name = new XmlName("", propname);
index f46a1b2..b97485e 100755 (executable)
@@ -33,7 +33,7 @@ namespace Tizen.NUI.Xaml
                     return null;
                 var rootTargetPath = XamlResourceIdAttribute.GetPathForType(rootObjectType);
                 var resourcePath = ResourceDictionary.RDSourceTypeConverter.GetResourcePath(Source, rootTargetPath);
-                var resString = DependencyService.Get<IResourcesLoader>().GetResource(resourcePath, rootObjectType.GetTypeInfo().Assembly, lineInfo);
+                var resString = DependencyService.Get<IResourcesLoader>()?.GetResource(resourcePath, rootObjectType.GetTypeInfo().Assembly, lineInfo);
                 return StyleSheet.FromString(resString);
             }
 
index e90b735..f881a2e 100755 (executable)
@@ -21,7 +21,7 @@ namespace Tizen.NUI.Xaml
                     continue;
                 if (!propertyName.Equals(XamlParser.McUri, "Ignorable"))
                     continue;
-                (parentNode.IgnorablePrefixes ?? (parentNode.IgnorablePrefixes = new List<string>())).AddRange(propertyValue.Split(','));
+                (parentNode.IgnorablePrefixes ?? (parentNode.IgnorablePrefixes = new List<string>()))?.AddRange(propertyValue.Split(','));
             }
 
             foreach (var propertyKvp in node.Properties.ToList())
index c728d04..63f30da 100755 (executable)
@@ -168,7 +168,7 @@ namespace Tizen.NUI.Xaml
                         node = new ElementNode(new XmlType(elementNsUri, elementName, typeArguments), elementNsUri,
                             reader as IXmlNamespaceResolver, elementXmlInfo.LineNumber, elementXmlInfo.LinePosition);
                         ((IElementNode)node).Properties.AddRange(attributes);
-                        (node.IgnorablePrefixes ?? (node.IgnorablePrefixes = new List<string>())).AddRange(prefixes);
+                        (node.IgnorablePrefixes ?? (node.IgnorablePrefixes = new List<string>()))?.AddRange(prefixes);
 
                         ParseXamlElementFor((IElementNode)node, reader);
                         nodes.Add(node);
index 83520a2..cbfefcc 100755 (executable)
@@ -30,7 +30,7 @@ namespace Tizen.NUI.Binding
             NavigationProxy = new NavigationImpl(this);
             SetCurrentApplication(this);
 
-            SystemResources = DependencyService.Get<ISystemResourcesProvider>().GetSystemResources();
+            SystemResources = DependencyService.Get<ISystemResourcesProvider>()?.GetSystemResources();
             SystemResources.ValuesChanged += OnParentResourcesChanged;
             _platformConfigurationRegistry = new Lazy<PlatformConfigurationRegistry<Application>>(() => new PlatformConfigurationRegistry<Application>(this));
         }
@@ -350,7 +350,7 @@ namespace Tizen.NUI.Binding
             await SaveSemaphore.WaitAsync();
             try
             {
-                await DependencyService.Get<IDeserializer>().SerializePropertiesAsync(Properties);
+                await DependencyService.Get<IDeserializer>()?.SerializePropertiesAsync(Properties);
             }
             finally
             {
index 8f9a3f5..dcf80ec 100755 (executable)
@@ -183,7 +183,7 @@ namespace Tizen.NUI.Binding
                     if (e.OldStartingIndex == -1 || e.OldItems?.Count > 1)
                         goto case NotifyCollectionChangedAction.Reset;
 
-                    var removedItem = e.OldItems[0] as TRestrict;
+                    var removedItem = e.OldItems?[0] as TRestrict;
                     if (removedItem == null || !removedItem.Owned)
                         break;
 
@@ -195,7 +195,7 @@ namespace Tizen.NUI.Binding
                     if (e.NewStartingIndex == -1 || e.OldStartingIndex == -1 || e.NewItems?.Count > 1)
                         goto case NotifyCollectionChangedAction.Reset;
 
-                    var newReplaceItem = e.NewItems[0] as TRestrict;
+                    var newReplaceItem = e.NewItems?[0] as TRestrict;
                     var oldReplaceItem = e.OldItems?[0] as TRestrict;
 
                     if ((newReplaceItem == null || !newReplaceItem.Owned) && (oldReplaceItem == null || !oldReplaceItem.Owned))
index 84eeaf3..b4cd21a 100755 (executable)
@@ -14,6 +14,8 @@ namespace Tizen.NUI.Binding
                 if (ve != null && ve.IsResourcesCreated)
                 {
                     resources = resources ?? new Dictionary<string, object>();
+                    if (ve.XamlResources != null)
+                    {
                     foreach (KeyValuePair<string, object> res in ve.XamlResources.MergedResources)
                         if (!resources.ContainsKey(res.Key))
                             resources.Add(res.Key, res.Value);
@@ -24,6 +26,7 @@ namespace Tizen.NUI.Binding
                             resources[res.Key] = mergedClassStyles;
                         }
                 }
+                }
                 var app = element as Application;
                 if (app != null && app.SystemResources != null)
                 {
@@ -48,11 +51,15 @@ namespace Tizen.NUI.Binding
             while (element != null)
             {
                 var ve = element as IResourcesProvider;
-                if (ve != null && ve.IsResourcesCreated && ve.XamlResources.TryGetValue(key, out value))
+                if (ve != null && ve.IsResourcesCreated && ve.XamlResources != null && ve.XamlResources.TryGetValue(key, out value))
+                {
                     return true;
+                }
                 var app = element as Application;
                 if (app != null && app.SystemResources != null && app.SystemResources.TryGetValue(key, out value))
+                {
                     return true;
+                }
                 element = element.Parent;
             }
 
index 8586d24..2902186 100755 (executable)
@@ -32,7 +32,7 @@ namespace Tizen.NUI.Binding
                 () =>
                 (MemberInfo)Property.DeclaringType.GetRuntimeProperty(Property.PropertyName) ?? (MemberInfo)Property.DeclaringType.GetRuntimeMethod("Get" + Property.PropertyName, new[] { typeof(BindableObject) });
 
-            object value = valueconverter.Convert(Value, Property.ReturnType, minforetriever, serviceProvider);
+            object value = valueconverter?.Convert(Value, Property.ReturnType, minforetriever, serviceProvider);
             Value = value;
             return this;
         }
index 508de0a..a67a9c3 100755 (executable)
@@ -7,12 +7,22 @@ namespace Tizen.NUI.StyleSheets
     {
         public static IEnumerable<StyleSheet> GetStyleSheets(this IResourcesProvider resourcesProvider)
         {
+            if (resourcesProvider == null)
+            {
+                yield break;
+            }
             if (!resourcesProvider.IsResourcesCreated)
+            {
                 yield break;
-            if (resourcesProvider.XamlResources.StyleSheets == null)
+            }
+            if (resourcesProvider.XamlResources == null || resourcesProvider.XamlResources.StyleSheets == null)
+            {
                 yield break;
+            }
             foreach (var styleSheet in resourcesProvider.XamlResources.StyleSheets)
+            {
                 yield return styleSheet;
+            }
         }
     }
 }
\ No newline at end of file
index 962bb61..407aa5f 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright(c) 2018 Samsung Electronics Co., Ltd.
+ * Copyright(c) 2019 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -172,32 +172,8 @@ namespace Tizen.NUI.BaseComponents
         public static readonly BindableProperty HorizontalAlignmentProperty = BindableProperty.Create(nameof(HorizontalAlignment), typeof(HorizontalAlignment), typeof(TextField), HorizontalAlignment.Begin, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var textField = (TextField)bindable;
-            string valueToString = "";
             if (newValue != null)
             {
-                switch ((HorizontalAlignment)newValue)
-                {
-                    case HorizontalAlignment.Begin:
-                    {
-                        valueToString = "BEGIN";
-                        break;
-                    }
-                    case HorizontalAlignment.Center:
-                    {
-                        valueToString = "CENTER";
-                        break;
-                    }
-                    case HorizontalAlignment.End:
-                    {
-                        valueToString = "END";
-                        break;
-                    }
-                    default:
-                    {
-                        valueToString = "BEGIN";
-                        break;
-                    }
-                }
                 Tizen.NUI.Object.SetProperty(textField.swigCPtr, TextField.Property.HORIZONTAL_ALIGNMENT, new Tizen.NUI.PropertyValue((int)newValue));
             }
         },
@@ -223,16 +199,8 @@ namespace Tizen.NUI.BaseComponents
         public static readonly BindableProperty VerticalAlignmentProperty = BindableProperty.Create(nameof(TextField.VerticalAlignment), typeof(VerticalAlignment), typeof(TextField), VerticalAlignment.Bottom, propertyChanged: (bindable, oldValue, newValue) =>
         {
             var textField = (TextField)bindable;
-            string valueToString = "";
             if (newValue != null)
             {
-                switch ((VerticalAlignment)newValue)
-                {
-                    case VerticalAlignment.Top: { valueToString = "TOP"; break; }
-                    case VerticalAlignment.Center: { valueToString = "CENTER"; break; }
-                    case VerticalAlignment.Bottom: { valueToString = "BOTTOM"; break; }
-                    default:  { valueToString = "BOTTOM"; break; }
-                }
                 Tizen.NUI.Object.SetProperty(textField.swigCPtr, TextField.Property.VERTICAL_ALIGNMENT, new Tizen.NUI.PropertyValue((int)newValue));
             }
         },
index 13d0ef8..7a3c4a9 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright(c) 2018 Samsung Electronics Co., Ltd.
+ * Copyright(c) 2019 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -1192,6 +1192,7 @@ namespace Tizen.NUI.BaseComponents
             }
         }
 
+        /// <summary>
         /// Downcasts a handle to textLabel handle
         /// </summary>
         /// <param name="handle"></param>
index b8dc9c2..26852ee 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright(c) 2018 Samsung Electronics Co., Ltd.
+ * Copyright(c) 2019 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -937,7 +937,9 @@ namespace Tizen.NUI.BaseComponents
             {
                 case "NORMAL": return DrawModeType.Normal;
                 case "OVERLAY_2D": return DrawModeType.Overlay2D;
+#pragma warning disable CS0618 // Disable deprecated warning as we do need to use the deprecated API here.
                 case "STENCIL": return DrawModeType.Stencil;
+#pragma warning restore CS0618
                 default: return DrawModeType.Normal;
             }
         });
index 012e523..c8c91d7 100755 (executable)
@@ -261,11 +261,11 @@ namespace Tizen.NUI
         {
             if (!BaseHandle.ReferenceEquals(x, null) || !BaseHandle.ReferenceEquals(y, null))
             {
-                if (x.HasBody())
+                if (x != null && x.HasBody())
                 {
                     return x;
                 }
-                if (y.HasBody())
+                if (y != null && y.HasBody())
                 {
                     return y;
                 }
index 6aeee67..621fa18 100755 (executable)
@@ -205,6 +205,7 @@ namespace Tizen.NUI
         /// ImfManager keyboard type changed.
         /// </summary>
         /// <since_tizen> 4 </since_tizen>
+        [EditorBrowsable(EditorBrowsableState.Never)]
         public event EventHandler<KeyboardTypeChangedEventArgs> KeyboardTypeChanged
         {
             add
index df7a7ef..fa8b5f0 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright(c) 2018 Samsung Electronics Co., Ltd.
+ * Copyright(c) 2019 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -65,13 +65,6 @@ namespace Tizen.NUI
         public enum LayerBehavior
         {
             /// <summary>
-            /// UI control rendering mode.
-            /// </summary>
-            /// <since_tizen> 3 </since_tizen>
-            [Obsolete("Please do not use! This will be deprecated! Please use LayerUI property instead!")]
-            [EditorBrowsable(EditorBrowsableState.Never)]
-            Layer2D,
-            /// <summary>
             /// UI control rendering mode (default mode).
             /// This mode is designed for UI controls that can overlap. In this
             /// mode renderer order will be respective to the tree hierarchy of
@@ -82,7 +75,16 @@ namespace Tizen.NUI
             /// traversal, the actors would interleave).<br />
             /// </summary>
             /// <since_tizen> 3 </since_tizen>
-            LayerUI = Layer2D,
+            LayerUI,
+
+            /// <summary>
+            /// UI control rendering mode.
+            /// </summary>
+            /// <since_tizen> 3 </since_tizen>
+            [Obsolete("Please do not use! This will be deprecated! Please use LayerUI property instead!")]
+            [EditorBrowsable(EditorBrowsableState.Never)]
+            Layer2D = LayerUI,
+
             /// <summary>
             /// Layer will use depth test.
             /// This mode is designed for a 3 dimensional scene where actors in front
index 3d1fd38..a703b42 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -355,18 +355,33 @@ namespace Tizen.NUI
     }
 
     /// <summary>
-    /// Graphics BackendType
+    /// Graphics Backend Type.
     /// </summary>
-    [Obsolete("Please do not use! This will be deprecated!")]
     [EditorBrowsable(EditorBrowsableState.Never)]
+    [Obsolete("Please do not use! This will be deprecated!")]
     public class Graphics
     {
+        /// <summary>
+        /// Graphics Backend Type.
+        /// </summary>
         public enum BackendType
         {
+            /// <summary>
+            /// The GLES backend.
+            /// </summary>
             Gles,
+            /// <summary>
+            /// The Vulkan backend.
+            /// </summary>
             Vulkan
         }
+
+        /// <summary>
+        /// The backend used by the NUIApplication.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
         public static BackendType Backend = BackendType.Gles;
+
         internal const string GlesCSharpBinder = "libdali-csharp-binder.so";
         internal const string VulkanCSharpBinder = "libdali-csharp-binder-vk.so";
     }
index 72ea43b..bc610a4 100755 (executable)
@@ -981,7 +981,7 @@ namespace Tizen.NUI
         /// <since_tizen> 3 </since_tizen>
         public Layer GetLayer(uint depth)
         {
-            if (depth < LayersChildren.Count)
+            if (depth < LayersChildren?.Count)
             {
                 Layer ret = LayersChildren[Convert.ToInt32(depth)];
                 return ret;
@@ -1102,7 +1102,7 @@ namespace Tizen.NUI
             NDalicPINVOKE.Stage_Add(stageCPtr, Layer.getCPtr(layer));
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
 
-            LayersChildren.Add(layer);
+            LayersChildren?.Add(layer);
         }
 
         /// <summary>
@@ -1115,7 +1115,7 @@ namespace Tizen.NUI
             NDalicPINVOKE.Stage_Remove(stageCPtr, Layer.getCPtr(layer));
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
 
-            LayersChildren.Remove(layer);
+            LayersChildren?.Remove(layer);
         }
 
         /// <summary>
@@ -1235,7 +1235,7 @@ namespace Tizen.NUI
             NDalicPINVOKE.Stage_Add(stageCPtr, Layer.getCPtr(layer));
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
 
-            LayersChildren.Add(layer);
+            LayersChildren?.Add(layer);
         }
 
         internal void Remove(Layer layer)
@@ -1243,7 +1243,7 @@ namespace Tizen.NUI
             NDalicPINVOKE.Stage_Remove(stageCPtr, Layer.getCPtr(layer));
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
 
-            LayersChildren.Remove(layer);
+            LayersChildren?.Remove(layer);
         }
 
         internal Vector2 GetSize()
@@ -1281,7 +1281,7 @@ namespace Tizen.NUI
             {
                 _rootLayer = new Layer(NDalicPINVOKE.Stage_GetRootLayer(stageCPtr), true);
                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
-                LayersChildren.Add(_rootLayer);
+                LayersChildren?.Add(_rootLayer);
             }
             return _rootLayer;
         }
index 85a45f7..5e32d27 100755 (executable)
@@ -94,7 +94,7 @@ namespace Tizen.NUI.Binding
             if (type != null)
                 _mergedInstance = s_instances.GetValue(type, (key) => (ResourceDictionary)Activator.CreateInstance(key));
             else
-                _mergedInstance = DependencyService.Get<IResourcesLoader>().CreateFromResource<ResourceDictionary>(resourcePath, assembly, lineInfo);
+                _mergedInstance = DependencyService.Get<IResourcesLoader>()?.CreateFromResource<ResourceDictionary>(resourcePath, assembly, lineInfo);
             OnValuesChanged(_mergedInstance.ToArray());
         }