public void SetTemplate(JSWrapper elementWrapper, string name, JSFunction factory) { var element = elementWrapper.As <Element>(); PropertyInfo p = element.GetType().GetProperty(name); p.SetValue(element, new DataTemplate(() => { try { var ac = (factory.Call(null) as JSValue).ToObject(); var eid = ac.GetJSPropertyValue("element"); var e = JSWrapper.FromKey(eid.ToString()).As <View>(); return(new TemplateView { View = e, SetBindingContext = (obj) => { ac.SetJSPropertyValue("data", (Java.Lang.Object)obj); } }); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); throw; } })); }
public void SetImport(JSWrapper elementWrapper, string name, JSFunction factory) { var element = elementWrapper.As <Element>(); var d = WAContext.GetImports(element); if (d == null) { d = new Dictionary <string, Func <Element> >(); WAContext.SetImports(element, d); } d[name] = () => { var t = WAContext.GetAtomControl(element); var jv = factory.Call((JSObject)t.Wrap(Engine)) as JSValue; return(JSWrapper.FromKey(jv.ToObject().GetJSPropertyValue("element").ToString()).As <Element>()); }; }
public static object ToType(this JSValue value, Type type) { if (value != null) { if ((bool)value.IsNull() || (bool)(value.IsUndefined())) { return(null); } } if (type == typeof(int)) { if (value == null) { return(0); } return(value.ToNumber().IntValue()); } if (type == typeof(short)) { if (value == null) { return(0); } return(value.ToNumber().ShortValue()); } if (type == typeof(float)) { if (value == null) { return(0); } return(value.ToNumber().FloatValue()); } if (type == typeof(double)) { if (value == null) { return(0); } return(value.ToNumber().DoubleValue()); } if (type == typeof(bool)) { if (value == null) { return(0); } return((bool)value.ToBoolean()); } if (type == typeof(DateTime)) { if (value == null) { return(DateTime.MinValue); } return((value as JSDate).ToDateTime()); } if (value == null) { return(null); } if (type == typeof(string)) { return(value.ToString()); } if (type == typeof(JSFunction) || type.IsSubclassOf(typeof(JSFunction))) { return(value.ToFunction()); } if (type == typeof(JSWrapper)) { return(JSWrapper.FromKey(value.ToString())); } if (value is JSArray j) { if (type == typeof(System.Collections.IEnumerable)) { return(new AtomEnumerable(j)); } // type is IList... var list = Activator.CreateInstance(type) as System.Collections.IList; for (int i = 0; i < j.Size(); i++) { Type itemType = type.GetGenericArguments()[0]; list[i] = (j.Get(i) as JSValue).ToType(itemType); } return(list); } if (type == typeof(JSObject)) { return(value.ToObject()); } if (type == typeof(JSValue) || type.IsSubclassOf(typeof(JSValue))) { return(value); } return(null); }