Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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");
                    }
                }
            }
        }