// ReSharper restore RedundantOverridenMember
/// <summary>
/// Suspends the change callbacks whenever a property has been called. This is very useful when
/// there are expensive property change callbacks registered with a property that need to be
/// temporarily disabled.
/// </summary>
/// <returns></returns>
public IDisposable SuspendChangeCallbacks()
{
var token = new DisposableToken <ModelBase>(this, x =>
{
lock (_lock)
{
if (_changeCallbacksSuspensionContext is null)
{
_changeCallbacksSuspensionContext = new SuspensionContext();
}
_changeCallbacksSuspensionContext.Increment();
}
},
x =>
{
lock (_lock)
{
var suspensionContext = _changeCallbacksSuspensionContext;
if (suspensionContext != null)
{
suspensionContext.Decrement();
if (suspensionContext.Counter == 0)
{
_changeCallbacksSuspensionContext = null;
}
}
}
// Note: don't invoke the "missed" callbacks
});
return(token);
}