diff options
| author | jpbruyere <jp.bruyere@hotmail.com> | 2017-02-28 14:26:58 +0100 |
|---|---|---|
| committer | jpbruyere <jp.bruyere@hotmail.com> | 2017-02-28 14:26:58 +0100 |
| commit | 05d57a1bfd696f8a652f2870f4bbe988f0800e11 (patch) | |
| tree | 2049501601a7885bcc3b6654836d60c7a930176f /src | |
| parent | 81f601a58343fb673a580df7583cbbadcd6b1e1b (diff) | |
debug ds prop binding remove handler by name, should be retested exhaustively
Diffstat (limited to 'src')
| -rw-r--r-- | src/GraphicObjects/TemplatedGroup.cs | 2 | ||||
| -rw-r--r-- | src/Instantiator.cs | 36 |
2 files changed, 25 insertions, 13 deletions
diff --git a/src/GraphicObjects/TemplatedGroup.cs b/src/GraphicObjects/TemplatedGroup.cs index 11ff7df5..b62407b6 100644 --- a/src/GraphicObjects/TemplatedGroup.cs +++ b/src/GraphicObjects/TemplatedGroup.cs @@ -154,7 +154,7 @@ namespace Crow NotifyValueChanged ("Data", data); - //lock (CurrentInterface.UpdateMutex) + lock (CurrentInterface.LayoutMutex) ClearItems (); if (data == null) diff --git a/src/Instantiator.cs b/src/Instantiator.cs index 3be86ce4..e0800478 100644 --- a/src/Instantiator.cs +++ b/src/Instantiator.cs @@ -576,6 +576,11 @@ namespace Crow int dmIdx = cachedDelegates.Count; cachedDelegates.Add (dm.CreateDelegate (typeof(EventHandler<ValueChangeEventArgs>))); ctx.emitCachedDelegateHandlerAddition (dmIdx, CompilerServices.eiValueChange, origine); + + #if DEBUG_BINDING + Debug.WriteLine("\tCrow property binding: " + dm.Name); + #endif + } void emitTemplateBindings(Context ctx, Dictionary<string, List<MemberAddress>> bindings){ //value changed dyn method @@ -803,23 +808,25 @@ namespace Crow il.Emit (OpCodes.Nop); - emitRemoveOldDataSourceHandler(il, "ValueChanged", delName,false); + emitRemoveOldDataSourceHandler(il, "ValueChanged", delName, true); if (!string.IsNullOrEmpty(bindingDef.TargetMember)){ if (bindingDef.TwoWay){ - System.Reflection.Emit.Label cancelRemove = il.DefineLabel (); - //remove handler if not null - il.Emit (OpCodes.Ldarg_2);//load old parent - il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS); - il.Emit (OpCodes.Brfalse, cancelRemove);//old parent is null +// System.Reflection.Emit.Label cancelRemove = il.DefineLabel (); +// //remove handler if not null +// il.Emit (OpCodes.Ldarg_2);//load old parent +// il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS); +// il.Emit (OpCodes.Brfalse, cancelRemove);//old parent is null //remove handler - il.Emit (OpCodes.Ldarg_1);//3d arg: instance bound to delegate (the source) - il.Emit (OpCodes.Ldstr, "ValueChanged");//2nd arg event name - il.Emit (OpCodes.Ldarg_2);//1st arg load old datasource - il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS); - il.Emit (OpCodes.Call, CompilerServices.miRemEvtHdlByTarget); - il.MarkLabel(cancelRemove); + emitRemoveOldDataSourceHandler(il, "ValueChanged", delName, false); + +// il.Emit (OpCodes.Ldarg_1);//3d arg: instance bound to delegate (the source) +// il.Emit (OpCodes.Ldstr, "ValueChanged");//2nd arg event name +// il.Emit (OpCodes.Ldarg_2);//1st arg load old datasource +// il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCOldDS); +// il.Emit (OpCodes.Call, CompilerServices.miRemEvtHdlByTarget); +// il.MarkLabel(cancelRemove); } il.Emit (OpCodes.Ldarg_2);//load datasource change arg il.Emit (OpCodes.Ldfld, CompilerServices.fiDSCNewDS); @@ -883,6 +890,11 @@ namespace Crow #endregion ctx.emitCachedDelegateHandlerAddition(delDSIndex, CompilerServices.eiDSChange); + + #if DEBUG_BINDING + Debug.WriteLine("\tDataSource ValueChanged: " + delName); + Debug.WriteLine("\tDataSource Changed: " + dm.Name); + #endif } /// <summary> /// Two way binding for datasource, graphicObj=>dataSource link, datasource value has priority |