public override void SetValue(object obj, object value)
{
ObjectWrapper ww = ObjectWrapper.Lookup (obj);
IDisposable t = ww != null && !ww.Loading? ww.UndoManager.AtomicChange : null;
try {
if (isWrapperProperty)
obj = ww;
if (memberInfo != null)
obj = memberInfo.GetValue (obj, null);
propertyInfo.SetValue (obj, value, null);
} catch (Exception ex) {
throw new InvalidOperationException ("Could not set value for property " + klass.Name + "." + Name + " to object '" + obj + "'", ex);
} finally {
if (t != null)
t.Dispose ();
}
}