public IDisposable SuspendChangeCallbacks()
{
var token = new DisposableToken<ModelBase>(this, x =>
{
lock (_propertyValuesLock)
{
if (_changeCallbacksSuspensionContext == null)
{
_changeCallbacksSuspensionContext = new SuspensionContext();
}
_changeCallbacksSuspensionContext.Increment();
}
},
x =>
{
lock (_propertyValuesLock)
{
var suspensionContext = _changeCallbacksSuspensionContext;
if (suspensionContext != null)
{
suspensionContext.Decrement();
if (suspensionContext.Counter == 0)
{
_changeCallbacksSuspensionContext = null;
}
}
}
// Note: don't invoke the "missed" callbacks
});
return token;
}