public IDisposable SuspendChangeNotifications(bool raiseOnResume = true)
{
var token = new DisposableToken<ModelBase>(this, x =>
{
lock (_propertyValuesLock)
{
if (_changeNotificationsSuspensionContext == null)
{
_changeNotificationsSuspensionContext = new SuspensionContext();
}
_changeNotificationsSuspensionContext.Increment();
}
},
x =>
{
SuspensionContext suspensionContext;
lock (_propertyValuesLock)
{
suspensionContext = _changeNotificationsSuspensionContext;
if (suspensionContext != null)
{
suspensionContext.Decrement();
if (suspensionContext.Counter == 0)
{
_changeNotificationsSuspensionContext = null;
}
}
}
if (raiseOnResume)
{
if (suspensionContext != null && suspensionContext.Counter == 0)
{
var properties = suspensionContext.Properties;
foreach (var property in properties)
{
RaisePropertyChanged(property);
}
}
}
});
return token;
}
#endregion