/// <summary>
        /// Rebinds the binding source.
        /// </summary>
        /// <param name="source">The source.</param>
        /// <param name="data">The data.</param>
        /// <param name="metadataChanged">if set to <c>true</c> then metadata (ovject/list type) was changed.</param>
        public static void RebindBindingSource(BindingSource source, object data, bool metadataChanged)
        {
            if (data != null)
            {
                source.DataSource = data;
            }

            // set Raise list changed to True
            source.RaiseListChangedEvents = true;
            // tell currency manager to resume binding 
            source.ResumeBinding();
            // Notify UI controls that the dataobject/list was reset - and if metadata was changed 
            source.ResetBindings(metadataChanged);
        }