/// <summary> /// 创建一个mvc模块 /// </summary> /// <param name="mIViewControl"></param> /// <param name="mIView"></param> static public M_MvcWarpper Create(string name, M_IViewControl mIViewControl, M_IView mIView) { //1.自动设置节点 ViewAutoSet(mIView); //2.绑定数据model mIViewControl.BindModel(); mIView.BindModel(); //3.自动绑定事件 BindEvnet(mIViewControl, mIView); // var bind = new M_MvcWarpper() { Name = name, MIViewControl = mIViewControl, MIView = mIView }; // return(bind); }
/// <summary> /// VC进行数据绑定 /// </summary> /// <param name="mIViewControl"></param> /// <param name="mIView"></param> static private void BindEvnet(M_IViewControl mIViewControl, M_IView mIView) { //开始反射所有的UI组件,自动注册Ctrl下面 OnEvent_+ 字段名 var viewType = mIView.GetType(); var controlType = mIViewControl.GetType(); var vfields = viewType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public); foreach (var f in vfields) { if (!f.FieldType.IsSubclassOf(typeof(UnityEngine.Object))) { continue; } //所有ui组件 if (f.FieldType == typeof(Button))//主动注册OnClick、 { // var fClick = controlType.GetMethod(string.Format("OnClick_{0}", f.Name), BindingFlags.Instance | BindingFlags.NonPublic); if (fClick != null) { var o = f.GetValue(mIView) as Button; o.onClick.AddListener(() => { fClick.Invoke(mIViewControl, new object[] {}); }); } else { Debugger.Log(string.Format("ui事件未实现:{0} - {1}", viewType.FullName, f.Name), "yellow"); } } else if (f.FieldType == typeof(Scrollbar))//主动注册OnValueChange { var o = f.GetValue(mIView) as Scrollbar; var fValueChange = controlType.GetMethod(string.Format("OnValueChange_{0}", f.Name), BindingFlags.Instance | BindingFlags.NonPublic); if (fValueChange != null) { o.onValueChanged.AddListener((value) => { fValueChange.Invoke(mIViewControl, new object[] { value }); }); } else { Debugger.Log(string.Format("ui事件未实现:{0} - {1}", viewType.FullName, f.Name), "yellow"); } } else if (f.FieldType == typeof(Slider)) //自动注册OnValueChange { var o = f.GetValue(mIView) as Slider; var fValueChange = controlType.GetMethod(string.Format("OnValueChange_{0}", f.Name), BindingFlags.Instance | BindingFlags.NonPublic); if (fValueChange != null) { o.onValueChanged.AddListener((value) => { fValueChange.Invoke(mIViewControl, new object[] { value }); }); } else { Debugger.Log(string.Format("ui事件未实现:{0} - {1}", viewType.FullName, f.Name), "yellow"); } } } }