public IDisposable SuspendValidations(bool validateOnResume = true)
{
var token = new DisposableToken<ModelBase>(this, x =>
{
lock (_validationLock)
{
if (_validationSuspensionContext == null)
{
_validationSuspensionContext = new SuspensionContext();
}
_validationSuspensionContext.Increment();
}
},
x =>
{
SuspensionContext suspensionContext;
lock (_validationLock)
{
suspensionContext = _validationSuspensionContext;
if (suspensionContext != null)
{
suspensionContext.Decrement();
if (suspensionContext.Counter == 0)
{
_validationSuspensionContext = null;
}
}
}
if (validateOnResume)
{
if (suspensionContext != null && suspensionContext.Counter == 0)
{
//var properties = suspensionContext.Properties;
// TODO: In v5, replace with context and smart validation
Validate(true, true);
//foreach (var property in properties)
//{
// Validate(property);
//}
}
}
});
return token;
}