aboutsummaryrefslogtreecommitdiffstatsci
path: root/src
diff options
context:
space:
mode:
authorjpbruyere <jp.bruyere@hotmail.com>2017-02-28 14:26:58 +0100
committerjpbruyere <jp.bruyere@hotmail.com>2017-02-28 14:26:58 +0100
commit05d57a1bfd696f8a652f2870f4bbe988f0800e11 (patch)
tree2049501601a7885bcc3b6654836d60c7a930176f /src
parent81f601a58343fb673a580df7583cbbadcd6b1e1b (diff)
debug ds prop binding remove handler by name, should be retested exhaustively
Diffstat (limited to 'src')
-rw-r--r--src/GraphicObjects/TemplatedGroup.cs2
-rw-r--r--src/Instantiator.cs36
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