/// <summary> /// Creates a new value change record. /// </summary> /// <param name="valueChange">The value change record to create.</param> public void CreateValueChange(IValueChange valueChange) { this.context.CreateValueChange( valueChange.Id, valueChange.MappingEntityTransactionId, valueChange.ValueName, valueChange.PreviousValue, valueChange.NewValue); }
/// <summary> /// Two way binding for datasource, graphicObj=>dataSource link, datasource value has priority /// and will be set as init for source property (in emitDataSourceBindings func) /// </summary> /// <param name="orig">Graphic object instance, source of binding</param> /// <param name="origMember">Origin member name</param> /// <param name="dest">datasource instance, target of the binding</param> /// <param name="destMember">Destination member name</param> static void dataSourceReverseBinding(IValueChange orig, string origMember, object dest, string destMember) { Type tOrig = orig.GetType (); Type tDest = dest.GetType (); PropertyInfo piOrig = tOrig.GetProperty (origMember); PropertyInfo piDest = tDest.GetProperty (destMember); #region ValueChanged emit DynamicMethod dm = new DynamicMethod ("dyn_valueChanged" + NewId, typeof (void), CompilerServices.argsBoundValueChange, true); ILGenerator il = dm.GetILGenerator (256); System.Reflection.Emit.Label endMethod = il.DefineLabel (); il.DeclareLocal (CompilerServices.TObject); il.Emit (OpCodes.Nop); //load value changed member name onto the stack il.Emit (OpCodes.Ldarg_2); il.Emit (OpCodes.Ldfld, CompilerServices.fiVCMbName); //test if it's the expected one il.Emit (OpCodes.Ldstr, origMember); il.Emit (OpCodes.Ldc_I4_4);//StringComparison.Ordinal il.Emit (OpCodes.Callvirt, CompilerServices.stringEquals); il.Emit (OpCodes.Brfalse, endMethod); //set destination member with valueChanged new value //load destination ref il.Emit (OpCodes.Ldarg_0); //load new value onto the stack il.Emit (OpCodes.Ldarg_2); il.Emit (OpCodes.Ldfld, CompilerServices.fiVCNewValue); CompilerServices.emitConvert (il, piOrig.PropertyType, piDest.PropertyType); il.Emit (OpCodes.Callvirt, piDest.GetSetMethod ()); il.MarkLabel (endMethod); il.Emit (OpCodes.Ret); #endregion orig.ValueChanged += (EventHandler<ValueChangeEventArgs>)dm.CreateDelegate (typeof(EventHandler<ValueChangeEventArgs>), dest); }
/// <summary> /// Creates a new value change record. /// </summary> /// <param name="valueChange">The value change record to create.</param> public void CreateValueChange(IValueChange valueChange) { this.Invoke( () => this.repository.CreateValueChange(valueChange), nameof(this.repository.CreateValueChange)); }