예제 #1
0
        public static Scope SuspendEvents <T>(this BindingSource <T> bs, bool reset_bindings_on_resume, bool preserve_position)
        {
            var pos = bs.Position;

            return(Scope.Create(
                       () =>
            {
                // Notify pre-reset before any changes are made
                if (reset_bindings_on_resume)
                {
                    bs.PreResetBindings();
                }

                // Save the raise list changed events state
                var r = bs.RaiseListChangedEvents;
                bs.RaiseListChangedEvents = false;
                return r;
            },
                       r =>
            {
                // Restore the raise events state
                bs.RaiseListChangedEvents = r;

                // Notify reset
                if (reset_bindings_on_resume)
                {
                    bs.ResetBindings(false, preserve_position: false, include_pre_reset: false);
                }

                // Restore position
                if (preserve_position)
                {
                    bs.Position = pos;
                }
            }));
        }