aboutsummaryrefslogtreecommitdiffstatsci
path: root/src
diff options
context:
space:
mode:
authorjpbruyere <jp.bruyere@hotmail.com>2016-02-03 18:19:30 +0100
committerjpbruyere <jp.bruyere@hotmail.com>2016-02-03 18:19:30 +0100
commit9e09e0561baf7a898c308180d142cecea9e56b8f (patch)
tree0512e610a9297397128e64760a2db0076d8047e0 /src
parent46560c8595bc6a36b51493214cbbff89c0694ef5 (diff)
Cast extention method for Type, used in binding resolution
Diffstat (limited to 'src')
-rw-r--r--src/ExtensionsMethods.cs13
-rw-r--r--src/GraphicObjects/GraphicObject.cs7
2 files changed, 19 insertions, 1 deletions
diff --git a/src/ExtensionsMethods.cs b/src/ExtensionsMethods.cs
index af756a78..19193e92 100644
--- a/src/ExtensionsMethods.cs
+++ b/src/ExtensionsMethods.cs
@@ -19,6 +19,7 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using System;
+using System.Linq.Expressions;
namespace Crow
{
@@ -38,6 +39,18 @@ namespace Crow
handler(sender, e);
}
}
+ /// <summary>
+ /// Type Extension method for Casting
+ /// </summary>
+ public static object Cast(this Type Type, object data)
+ {
+ var DataParam = Expression.Parameter(typeof(object), "data");
+ var Body = Expression.Block(Expression.Convert(Expression.Convert(DataParam, data.GetType()), Type));
+
+ var Run = Expression.Lambda(Body, DataParam).Compile();
+ var ret = Run.DynamicInvoke(data);
+ return ret;
+ }
}
}
diff --git a/src/GraphicObjects/GraphicObject.cs b/src/GraphicObjects/GraphicObject.cs
index 7fd0e1ca..8bbf67b0 100644
--- a/src/GraphicObjects/GraphicObject.cs
+++ b/src/GraphicObjects/GraphicObject.cs
@@ -986,7 +986,12 @@ namespace Crow
}else
targetValue = targetValue.ToString ();
}
- b.Source.Property.GetSetMethod ().Invoke (this, new object[] { targetValue });
+ if (targetValue != null)
+ b.Source.Property.GetSetMethod ().Invoke
+ (this, new object[] { b.Source.Property.PropertyType.Cast(targetValue)});
+ else
+ b.Source.Property.GetSetMethod ().Invoke
+ (this, new object[] { targetValue });
#endregion
//if no dyn update, skip jump table