Unity3D開發(fā)技術(shù)研究構(gòu)建框架PureMVC項(xiàng)目之APP界面應(yīng)用(下篇)

一晒喷、案例說明

本篇承接上篇為基礎(chǔ),針對(duì)UI開發(fā)一個(gè)以PureMVC為框架思想的“增刪改查”APP界面應(yīng)用纽帖。

二氧映、框架視圖

三、關(guān)鍵代碼

GameStart

/***
 * 
 *    Title: "App應(yīng)用" 項(xiàng)目
 *           主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目 
 *
 *           啟動(dòng)PureMVC框架
 * 
 *    Description: 
 *           功能:
 *                  
 *    Date: 2021.4.9
 *    Version: 0.1版本
 *    Modify Recoder: 
 *    
 *   
 */
using System.Collections;
using System.Collections.Generic;
using SUIFW;
using UnityEngine;

namespace AppByPureMVC
{
    public class GameStart:MonoBehaviour
    {
        //public UserList userListObj;
        public UserEmployeeInfo UseEmpInfo;

        void Start()
        {
            Log.Write(GetType()+"/Start()");
            //啟動(dòng)框架
            ApplicationFacade appFacade = ApplicationFacade.Instance as ApplicationFacade;
            //啟動(dòng)項(xiàng)目
            if (appFacade != null && UseEmpInfo != null)
            {
                appFacade.SendNotification(ProConsts.Com_InitMediator, UseEmpInfo);
            }
        }
    }
}

ApplicationFacade

/***
 * 
 *    Title: "App應(yīng)用" 項(xiàng)目
 *           主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目 
 *
 *           PureMvc 框架入口程序
 * 
 *    Description: 
 *           功能:
 *                  
 *     Date: 2021.4.9
 *    Version: 0.1版本
 *    Modify Recoder: 
 *    
 *   
 */
using System.Collections;
using System.Collections.Generic;
using PureMVC.Interfaces;
using PureMVC.Patterns;
using SUIFW;
using UnityEngine;

namespace AppByPureMVC
{
    public class ApplicationFacade:Facade {

        protected ApplicationFacade()
        {
             //空
            Log.Write(GetType() + "/構(gòu)造");
        }

        /// <summary>
        /// PureMVC 得到實(shí)例引用
        /// 
        /// 得到“單例”且“線程安全”的引用
        /// </summary>
        public new static IFacade Instance
        {
            get
            {
                if (m_instance==null)
                {
                    lock (m_staticSyncRoot)
                    {
                        if (m_instance==null)
                        {
                            m_instance=new ApplicationFacade();
                        }
                    }
                }
                return m_instance;
            }

        }


        /// <summary>
        /// 注冊模型層實(shí)例
        /// </summary>
        protected override void InitializeModel()
        {
            base.InitializeModel();
            RegisterProxy(new UserProxy());
        }

        /// <summary>
        /// 注冊視圖層實(shí)例
        /// </summary>
        protected override void InitializeView()
        {
            base.InitializeView();
            RegisterMediator(new UserListMediator());
            RegisterMediator(new UserFormMediator());
        }

        /// <summary>
        /// 注冊控制層實(shí)例
        /// </summary>
        protected override void InitializeController()
        {
            base.InitializeController();
            RegisterCommand(ProConsts.Com_InitMediator,typeof(StartupApplication));
        }
    }
}

ProConsts

/***
 * 
 *    Title: "App應(yīng)用" 項(xiàng)目
 *           主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目 
 *
 *           定義項(xiàng)目中所有的“常量”
 * 
 *    Description: 
 *           功能:
 *                  
 *    Date: 2021.4.9
 *    Version: 0.1版本
 *    Modify Recoder: 
 *    
 *   
 */
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace AppByPureMVC
{
    public class ProConsts {
        /*  PureMVC 命令消息 */
        public const string Com_InitMediator="Com_InitMediator";
        /*  PureMVC 通知消息 */
        public const string Msg_InitUserListMediator = "Msg_InitUserListMediator";
        public const string Msg_InitUserFormMediator = "Msg_InitUserFormMediator";
        //增加用戶信息
        public const string Msg_AddNewUserInfo = "Msg_AddNewUserInfo";
        //清除用戶信息
        public const string Msg_ClearUserInfo = "Msg_ClearUserInfo";
        //發(fā)送用戶列表Mediator消息_增加用戶記錄
        public const string Msg_AddNewUserInfoToUserListMed = "Msg_AddNewUserInfoToUserListMed";
        //發(fā)送用戶列表Mediator消息_更新用戶記錄
        public const string Msg_UpdateUserInfoToUserListMed = "Msg_UpdateUserInfoToUserListMed";
        //發(fā)送到列表信息Mediator 關(guān)于用戶選擇信息
        public const string Msg_SelectUserInfoByCtrlToUserListMediator = "Msg_SelectUserInfoByCtrlToUserListMediator";
        //發(fā)送到“用戶窗體”Mediator類狈邑。
        public const string Msg_SelUserInfoByUserListMedToUserFormMed = "Msg_SelUserInfoByUserListMedToUserFormMed";

    }
}

UserEmployeeInfo

/***
 * 
 *    Title: "App應(yīng)用" 項(xiàng)目
 *           主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目 
 *
 *           幫助腳本
 * 
 *    Description: 
 *           功能:
 *                  
 *    Date: 2021.4.9
 *    Version: 0.1版本
 *    Modify Recoder: 
 *    
 *   
 */
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace AppByPureMVC
{
    public class UserEmployeeInfo:MonoBehaviour
    {
        public UserList UserListobj;
        public UserForm UserFormobj;

    }
}
邏輯控制層 Control

StartupApplication

/***
 * 
 *    Title: "App應(yīng)用" 項(xiàng)目
 *           主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目 
 *
 *           控制層: 初始化用戶列表Mediator 
 * 
 *    Description: 
 *           功能:
 *                  
 *     Date: 2021.4.9
 *    Version: 0.1版本
 *    Modify Recoder: 
 *    
 *   
 */
using System.Collections;
using System.Collections.Generic;
using PureMVC.Interfaces;
using PureMVC.Patterns;
using SUIFW;
using UnityEngine;

namespace AppByPureMVC
{
    public class StartupApplication:SimpleCommand
    {
        //private UserList userListObj = null;
        private UserEmployeeInfo userEmpInfo = null;
        
        public override void Execute(INotification notification)
        {
            Log.Write(GetType() + "/Execute");
            userEmpInfo = notification.Body as UserEmployeeInfo;
            if (userEmpInfo != null)
            {
                //初始化用戶列表操作類
                SendNotification(ProConsts.Msg_InitUserListMediator, userEmpInfo.UserListobj);
                //初始化用戶窗體操作類
                SendNotification(ProConsts.Msg_InitUserFormMediator, userEmpInfo.UserFormobj);

            }
        }
    }
}
數(shù)據(jù)模型層 Mode

UserProxy

/***
 * 
 *    Title: "App應(yīng)用" 項(xiàng)目
 *           主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目 
 *           模型層:代理類
 *    Description: 
 *           功能: 針對(duì)數(shù)據(jù)實(shí)體類,進(jìn)行各種操作护锤。
 *                  
 *     Date: 2021.4.9
 *    Version: 0.1版本
 *    Modify Recoder: 
 *    
 *   
 */
using System.Collections;
using System.Collections.Generic;
using PureMVC.Patterns;
using SUIFW;
using UnityEngine;
using UnityEngine.AI;

namespace AppByPureMVC
{
    public class UserProxy:Proxy {
        //類名稱
        public new const string NAME = "UserProxy";
        //只讀屬性
        public IList<UserVO> Users
        {
            get { return base.Data as IList<UserVO>; }
        }

        //構(gòu)造函數(shù)
        public UserProxy():base(NAME,new List<UserVO>())
        {
            Log.Write(GetType() + "/構(gòu)造");
            AddUserItem(new UserVO("陸","毅",true,"技術(shù)研發(fā)部","01012345678","luli@yahoo.cn"));
            AddUserItem(new UserVO("楊", "冪", false, "銷售市場部", "13166668888", "yangmi@yahoo.cn"));
            AddUserItem(new UserVO("angle", "baby", false, "市場部", "01012345678", "luli@yahoo.cn"));
            AddUserItem(new UserVO("吳", "一凡", true, "技術(shù)研發(fā)部", "01012345678", "luli@yahoo.cn"));
            AddUserItem(new UserVO("沙", "寶亮", true, "技術(shù)研發(fā)部", "01012345678", "luli@yahoo.cn"));
            Log.Write(GetType() + "/Users.count="+Users.Count);
        }

        //增加用戶數(shù)據(jù)
        public void AddUserItem(UserVO user)
        {
            if (user!=null)
            {
                Users.Add(user);
            }
        }

        //更新數(shù)據(jù)
        public void UpdateUserItems(UserVO user)
        {
            for (int i = 0; i < Users.Count; i++)
            {
                if (Users[i].Equals(user))
                {
                    //更新
                    Users[i] = user;
                    break;
                }
            }
        }

        //刪除數(shù)據(jù)
        public void DeleteUserItems(UserVO user)
        {
            for (int i = 0; i < Users.Count; i++)
            {
                if (Users[i].Equals(user))
                {
                    Users.RemoveAt(i);
                    break;                  
                }
            }
        }



    }
}

UserVO

/***
 * 
 *    Title: "App應(yīng)用" 項(xiàng)目
 *           主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目
 *           
 *           模型層: 數(shù)據(jù)實(shí)體類
 *
 *    Description: 
 *           功能:
 *                  
 *    Date: 2021.4.9
 *    Version: 0.1版本
 *    Modify Recoder: 
 *    
 *   
 */
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace AppByPureMVC
{
    public class UserVO {
        //字段
        private string _FistName;                           //姓
        private string _LastName;                           //名字
        private bool _Gender;                               //性別
        private string _Department;                         //部門
        private string _Telephone;                          //聯(lián)系方式
        private string _Email;                              //郵箱

        //屬性
        public string UserName
        {
            get { return _FistName + _LastName; }
        }
        public string FirstName
        {
            set { _FistName = value; }
            get { return _FistName ; }
        }
        public string LastName
        {
            set { _LastName = value; }
            get { return _LastName; }
        }     
        public bool Gender
        {
            set { _Gender = value; }
            get { return _Gender; }
        }
        public string Department
        {
            set { _Department = value; }
            get { return _Department; }
        }
        public string Telephone
        {
            set { _Telephone = value; }
            get { return _Telephone; }
        }
        public string Email
        {
            set { _Email = value; }
            get { return _Email; }
        }

        //只讀屬性: 有效性
        public bool IsValid
        {
            get
            {
                return !string.IsNullOrEmpty(UserName) && !string.IsNullOrEmpty(Department);
            }
        }

        public UserVO()
        {
            //空
        }

        public UserVO(string fname,string lname,bool gender,string dep,string tel,string email)
        {
            if (!string.IsNullOrEmpty(fname)) _FistName = fname;
            if (!string.IsNullOrEmpty(lname)) _LastName = lname;
            _Gender = gender;
            if (!string.IsNullOrEmpty(dep)) _Department = dep;
            if (!string.IsNullOrEmpty(tel)) _Telephone = tel;
            if (!string.IsNullOrEmpty(email)) _Email = email;
        }

        //對(duì)象比較
        public override bool Equals(object other)
        {
            bool boolResult = false;                        //返回結(jié)果
            UserVO otherVO = null;

            otherVO = other as UserVO;
            if (otherVO!=null)
            {
                if (this.UserName==otherVO.UserName)
                {
                    boolResult = true;
                }
            }

            return boolResult;
        }
    }
}
視圖交互層 View

UserListMediator

/***
 * 
 *    Title: "App應(yīng)用" 項(xiàng)目
 *           主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目 
 *           
 *           視圖層:用戶列表信息操作類
 *
 *    Description: 
 *           功能:
 *                  
 *     Date: 2021.4.9
 *    Version: 0.1版本
 *    Modify Recoder: 
 *    
 *   
 */
using System.Collections;
using System.Collections.Generic;
using PureMVC.Interfaces;
using SUIFW;
using UnityEngine;
using PureMVC.Patterns;

namespace AppByPureMVC
{
    public class UserListMediator : Mediator
    {
        //字段
        public new const string NAME = "UserListMediator"; //本類名稱
        private UserProxy _UserProxy; //模型層官地,用戶信息代理類
        //(只讀)屬性
        private UserList _UserListProp
        {
            get
            {
                return base.ViewComponent as UserList;
            }
        }
        //當(dāng)前用戶選擇的記錄
        private UserVO _CurrentSelectUserRecord = null;


        public UserListMediator():base(NAME)
        {
            Log.Write(GetType() + "/構(gòu)造");
            //構(gòu)造方法為空酿傍。
        }

        /// <summary>
        /// 初始化用戶列表Mediator
        /// </summary>
        /// <param name="userList">用戶列表腳本</param>
        internal void InitUserListMediator(UserList userListObj)
        {
            if (userListObj != null)
            {
                Log.Write(GetType() + "/InitUserListMediator()");
                base.m_mediatorName = NAME;
                base.m_viewComponent = userListObj;

                //委托注冊
                userListObj.NewUser += HandleNewUser;
                userListObj.DeleteUser += HandleDeleteUser;
            }
            //加載且顯示初始視圖內(nèi)容
            Log.Write(GetType() + "/InitUserListMediator()/_UserProxy.Users.count="+_UserProxy.Users.Count);
            userListObj.LoadAndShowUserListInfo(_UserProxy.Users);
        }

        /// <summary>
        /// 本類實(shí)例在注冊時(shí)候觸發(fā)
        /// </summary>
        public override void OnRegister()
        {
            base.OnRegister();
            //得到“用戶代理”引用
            _UserProxy = Facade.RetrieveProxy(UserProxy.NAME) as UserProxy;
        }


        /// <summary>
        /// 所有關(guān)注的“消息”
        /// </summary>
        /// <returns></returns>
        public override IList<string> ListNotificationInterests()
        {
            IList<string> list = new List<string>();
            //初始化本類實(shí)例
            list.Add(ProConsts.Msg_InitUserListMediator);
            //本類(下級(jí))控制腳本發(fā)來的選擇信息
            list.Add(ProConsts.Msg_SelectUserInfoByCtrlToUserListMediator);
            //從UserFormMediate 發(fā)來信息:增加新用戶
            list.Add(ProConsts.Msg_AddNewUserInfoToUserListMed);
            //從UserFormMediate 發(fā)來信息:更新用戶信息
            list.Add(ProConsts.Msg_UpdateUserInfoToUserListMed);
            return list;
        }

        /// <summary>
        /// 處理所有關(guān)注的“消息”
        /// </summary>
        /// <param name="notification"></param>
        public override void HandleNotification(INotification notification)
        {
            switch (notification.Name)
            {
                //調(diào)用初始化方法
                case ProConsts.Msg_InitUserListMediator:
                    UserList userListObj = notification.Body as UserList;
                    InitUserListMediator(userListObj);
                    break;

                //處理用戶選擇的用戶記錄
                case ProConsts.Msg_SelectUserInfoByCtrlToUserListMediator:
                    UserVO  userVo = notification.Body as UserVO;
                    HandelSelctUserInfo(userVo);
                    break;

                //從UserFormMediate 發(fā)來信息:增加新用戶
                case ProConsts.Msg_AddNewUserInfoToUserListMed:
                    UserVO userVoObj = notification.Body as UserVO;
                    SubmitNewUser(userVoObj);
                    break;
                //從UserFormMediate 發(fā)來信息:更新用戶信息
                case ProConsts.Msg_UpdateUserInfoToUserListMed:
                    UserVO userVoObj2 = notification.Body as UserVO;
                    SubmitUpdateUserInfo(userVoObj2);
                    break;

                default:
                    break;
            }
        }

        #region 私有方法

        //處理“選擇用戶操作”
        private void HandelSelctUserInfo(UserVO userVO)
        {
            if (userVO!=null)
            {
                //保存當(dāng)前用戶選擇的記錄烙懦。
                _CurrentSelectUserRecord = userVO;
                //顯示窗體“刪除”按鈕
                _UserListProp.ShowDeleteButton();
                //發(fā)送消息,發(fā)送“用戶窗體”類赤炒。
                SendNotification(ProConsts.Msg_SelUserInfoByUserListMedToUserFormMed, userVO);
            }
        }

        //處理“新用戶”操作
        private void HandleNewUser()
        {
            //發(fā)送消息氯析,給“用戶(窗體)表單”視圖。
            SendNotification(ProConsts.Msg_ClearUserInfo);
        }

        //處理“刪除用戶”操作
        private void HandleDeleteUser()
        {
            if (_UserProxy!=null && _CurrentSelectUserRecord!=null)
            {
                //代理層莺褒,調(diào)用刪除方法
                _UserProxy.DeleteUserItems(_CurrentSelectUserRecord);
                //刷新“用戶列表”
                _UserListProp.LoadAndShowUserListInfo(_UserProxy.Users);
                //通知“用戶窗體”操作類掩缓,清空窗體信息
                SendNotification(ProConsts.Msg_ClearUserInfo);
            }
        }

        //提交(處理)增加“新用戶”操作
        private void SubmitNewUser(UserVO newUserVo)
        {
            //調(diào)用模型層代理方法,增加一條記錄
            if (_UserProxy!=null && newUserVo!=null)
            {
                _UserProxy.AddUserItem(newUserVo);
                //刷新窗體信息
                _UserListProp.LoadAndShowUserListInfo(_UserProxy.Users);
            }
        }

        //提交(處理)更新用戶信息操作
        private void SubmitUpdateUserInfo(UserVO needUpdateUserVo)
        {
            //調(diào)用模型層代理方法遵岩,增加一條記錄
            if (_UserProxy != null && needUpdateUserVo != null)
            {
                _UserProxy.UpdateUserItems(needUpdateUserVo);
                //刷新窗體信息
                _UserListProp.LoadAndShowUserListInfo(_UserProxy.Users);
            }
        }

        #endregion
    }
}

UserFormMediator

/***
 * 
 *    Title: "App應(yīng)用" 項(xiàng)目
 *           主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目 
 *
 *           視圖層: 用戶窗體操作類
 * 
 *    Description: 
 *           功能:
 *                  
 *    Date: 2021.4.9
 *    Version: 0.1版本
 *    Modify Recoder: 
 *    
 *   
 */
using System.Collections;
using System.Collections.Generic;
using PureMVC.Interfaces;
using PureMVC.Patterns;
using UnityEngine;

namespace AppByPureMVC
{
    /// <summary>
    /// 用戶類型
    /// </summary>
    public enum UserFormType
    {
        //創(chuàng)建(新用戶)
        Create,
        //更新
        Update
    }

    public class UserFormMediator:Mediator
    {
        public new const string NAME = "UserFormMediator";
        //操作模式
        private UserFormType _UserFromType = UserFormType.Create;
        //(只讀)屬性
        private UserForm _UserForm_Prop
        {
            get
            {
                return base.ViewComponent as UserForm;
            }
        }

        /// <summary>
        /// 構(gòu)造函數(shù)
        /// </summary>
        public UserFormMediator():base(NAME)
        {
            //空
        }

        /// <summary>
        /// 初始化方法
        /// </summary>
        /// <param name="userFormObj"></param>
        internal void InitUserFormMediator(UserForm userFormObj)
        {
            if (userFormObj!=null)
            {
                base.m_mediatorName = NAME;
                base.m_viewComponent = userFormObj;
                //委托注冊
                _UserForm_Prop.HandlerComfirmButton = SumitUserInfo;

            }
        }

        /// <summary>
        /// 關(guān)注消息內(nèi)容
        /// </summary>
        /// <returns></returns>
        public override IList<string> ListNotificationInterests()
        {
            IList<string> list=new List<string>();
            //初始化本類實(shí)例
            list.Add(ProConsts.Msg_InitUserFormMediator);
            //接受用戶選擇的用戶信息
            list.Add(ProConsts.Msg_SelUserInfoByUserListMedToUserFormMed);
            //增加一條用戶信息
            list.Add(ProConsts.Msg_AddNewUserInfo);
            //清除用戶信息
            list.Add(ProConsts.Msg_ClearUserInfo);

            return list;
        }

        /// <summary>
        /// 處理消息通知
        /// </summary>
        /// <param name="notification"></param>
        public override void HandleNotification(INotification notification)
        {
            switch (notification.Name)
            {
                //初始化信息
                case ProConsts.Msg_InitUserFormMediator:
                    UserForm userFormObj=notification.Body as UserForm;
                    InitUserFormMediator(userFormObj);
                    break;

                //用戶選擇信息
                case ProConsts.Msg_SelUserInfoByUserListMedToUserFormMed:
                    _UserFromType = UserFormType.Update;
                    UserVO userVoObj = notification.Body as UserVO;
                    DisplayAndUpdateUserForm(UserFormType.Update,userVoObj);
                    break;

                //增加用戶信息
                case ProConsts.Msg_AddNewUserInfo:
                    _UserFromType = UserFormType.Create;
                    DisplayAndUpdateUserForm(UserFormType.Create);
                    break;

                //清除用戶信息
                case ProConsts.Msg_ClearUserInfo:
                    _UserFromType = UserFormType.Create;
                    _UserForm_Prop.ClearForm();
                    break;
                default:
                    break;
            }
        }

        /// <summary>
        /// 顯示: 更新與顯示用戶的窗體信息
        /// </summary>
        /// <param name="showType"></param>
        /// <param name="userVoObj"></param>
        private void DisplayAndUpdateUserForm(UserFormType showType,UserVO userVoObj=null)
        {
            if (_UserForm_Prop!=null)
            {
                _UserForm_Prop.ShowUserFormInfo(showType,userVoObj);
            }
        }

        /// <summary>
        /// 提交: 用戶點(diǎn)擊“確認(rèn)”按鈕你辣,提交信息
        /// </summary>
        private void SumitUserInfo()
        {
            switch (_UserFromType)
            {
                case UserFormType.Create:
                    AddNewUserInfo();
                    break;
                case UserFormType.Update:
                    if (_UserForm_Prop.UserVO!=null)
                    {
                        UpdateUserFrom(_UserForm_Prop.UserVO);                    
                    }
                    break;
                default:
                    break;
            }
        }

        /// <summary>
        /// 提交:增加新用戶
        ///   功能:往“用戶列表”Mediatro 發(fā)送消息,增加一條新記錄尘执,且顯示舍哄。
        /// </summary>
        private void AddNewUserInfo()
        {
            SendNotification(ProConsts.Msg_AddNewUserInfoToUserListMed,_UserForm_Prop.UserVO);
        }

        /// <summary>
        /// 提交:更新用戶信息
        ///   功能:往“用戶列表”Mediatro 發(fā)送消息,更新指定記錄信息且顯示誊锭。
        /// </summary>
        private void UpdateUserFrom(UserVO uservoObj)
        {
            SendNotification(ProConsts.Msg_UpdateUserInfoToUserListMed, uservoObj);
        }
    }
}

UserForm

/***
 * 
 *    Title: "App應(yīng)用" 項(xiàng)目
 *           主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目 
 *           
 *           視圖層: 用戶信息窗體
 *
 *    Description: 
 *           功能: 顯示用戶的單條信息(為了查看表悬、更新)
 *                  
 *    Date: 2021.4.9
 *    Version: 0.1版本
 *    Modify Recoder: 
 *    
 *   
 */
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

namespace AppByPureMVC
{
    public class UserForm:MonoBehaviour{
        //委托
        public System.Action HandlerComfirmButton;
        //用戶控件
        public Button BtnComfirm;                           //確認(rèn)按鈕
        public InputField Inp_FirstName;
        public InputField Inp_LastName;
        public Toggle Tog_Male;
        public Toggle Tog_Famale;
        public InputField Inp_Department;
        public InputField Inp_Telphone ;
        public InputField Inp_Email;
        //用戶實(shí)體類
        private UserVO _UserVO;
        //(只讀)屬性
        public UserVO UserVO
        {
            get { return _UserVO; }
        }


        void Start()
        {
            //注冊按鈕事件
            BtnComfirm.onClick.AddListener(HandleConfirmButtonClick);
            //凍結(jié)確認(rèn)按鈕
            FreezeConfirmButton();
            //控件注冊
            Inp_FirstName.onValueChanged.AddListener(ClickInputControl);
        }

        /// <summary>
        /// 顯示用戶窗體信息
        /// </summary>
        /// <param name="showType"></param>
        /// <param name="userVo"></param>
        public void ShowUserFormInfo(UserFormType showType,UserVO userVo=null)
        {
            switch (showType)
            {
                case UserFormType.Create:
                    ClearForm();
                   break;
                case UserFormType.Update:
                    ShowUserFormInfo(userVo);
                   break;
                default:
                    break;
            }
        }

        /// <summary>
        /// 顯示用戶窗體信息
        /// </summary>
        /// <param name="userVoObj"></param>
        private  void ShowUserFormInfo(UserVO userVoObj)
        {
            if (userVoObj!=null)
            {
                _UserVO = userVoObj;
                //控件顯示
                Inp_FirstName.text = userVoObj.FirstName;
                Inp_LastName.text = userVoObj.LastName;
                if (userVoObj.Gender)
                {
                    Tog_Male.isOn = true;
                }
                else
                {
                    Tog_Famale.isOn = true;
                }
                Inp_Department.text = userVoObj.Department;
                Inp_Telphone.text = userVoObj.Telephone;
                Inp_Email.text = userVoObj.Email;
            }
        }

        /// <summary>
        /// 清空窗體
        /// </summary>
        public void ClearForm()
        {
            _UserVO = null;
            Inp_FirstName.text = "";
            Inp_LastName.text = "";
            Inp_Department.text = "";
            Inp_Telphone.text = "";
            Inp_Email.text = "";
            //凍結(jié)“確認(rèn)”按鈕
            FreezeConfirmButton();
        }



        #region 私有方法

        /// <summary>
        /// 處理“確認(rèn)”按鈕
        /// </summary>
        private void HandleConfirmButtonClick()
        {
            //窗體數(shù)據(jù)合法性檢查
            if (!CheckUserForm())
            {
                return;
            }
            //調(diào)用委托
            if (HandlerComfirmButton!=null)
            {
                HandlerComfirmButton.Invoke();
            }
        }

        /// <summary>
        /// 檢查用戶窗體信息(即:不允許用戶輸入“空”信息)
        /// 返回:true 表示數(shù)據(jù)合法
        /// </summary>
        /// <returns></returns>
        private bool CheckUserForm()
        {
            if (_UserVO==null)
            {
                _UserVO=new UserVO();
            }
            //獲取數(shù)據(jù) 
            _UserVO.FirstName = Inp_FirstName.text;
            _UserVO.LastName = Inp_LastName.text;
            if (Tog_Male.isOn)
            {
                _UserVO.Gender = true;
            }
            else if (Tog_Famale.isOn)
            {
                _UserVO.Gender = false;
            }
            _UserVO.Department = Inp_Department.text;
            _UserVO.Telephone = Inp_Telphone.text;
            _UserVO.Email = Inp_Email.text;
            //數(shù)據(jù)檢查
            if (_UserVO.IsValid)
            {
                return true;
            }

            return false;
        }

        /// <summary>
        /// 凍結(jié)確認(rèn)按鈕
        /// </summary>
        private void FreezeConfirmButton()
        {
            BtnComfirm.interactable = false;
        }

        /// <summary>
        /// 顯示“確認(rèn)”按鈕
        /// </summary>
        private void ShowConfirmButton()
        {
            BtnComfirm.interactable = true;
        }

        //檢查控件輸入信息
        private void ClickInputControl(string strInput)
        {
            if (!string.IsNullOrEmpty(strInput))
            {
                //允許顯示
                ShowConfirmButton();
            }
        }


        #endregion


    }
}

UserList

/***
 * 
 *    Title: "App應(yīng)用" 項(xiàng)目
 *           主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目 
 *
 *                 視圖層: 用戶列表信息腳本
 * 
 *    Description: 
 *           功能:
 *                  
 *    Date: 2021.4.9
 *    Version: 0.1版本
 *    Modify Recoder: 
 *    
 *   
 */
using System.Collections;
using System.Collections.Generic;
//using System.Net.Mime;
//using Boo.Lang;
using UnityEngine;
using UnityEngine.UI;

namespace AppByPureMVC
{
    public class UserList:MonoBehaviour{
        //系統(tǒng)委托
        public System.Action NewUser;                       //新用戶
        public System.Action SelectUser;                    //選擇用戶信息
        public System.Action DeleteUser;                    //刪除用戶信息
        //用戶列表
        public UserList_Item UserListItemPrefab;
        //文本控件
        public Text TxtUseListNumber;                       //用戶列表數(shù)量
        //按鈕控件
        public Button btn_New;                              //新建用戶控件
        public Button btn_Delete;                           //刪除用戶控件
        //用戶列表信息集合
        private List<UserList_Item> _UserListInfo = new List<UserList_Item>();



        void Start()
        {
            //初始化字段
            TxtUseListNumber.text = "0";
            //設(shè)置隱藏
            UserListItemPrefab.gameObject.SetActive(false);
            //按鈕事件注冊
            btn_New.onClick.AddListener(ClickBtn_New);
            btn_Delete.onClick.AddListener(ClickBtn_Delete);
            //默認(rèn),凍結(jié)刪除按鈕
            FreezeDeleteButton();
        }
  
        /// <summary>
        /// 提取顯示用戶列表信息
        /// </summary>
        /// <param name="listInfo">需要信息的信息集合</param>
        public void LoadAndShowUserListInfo(IList<UserVO> listInfo )
        {
            //清空列表信息
            ClearItems();
            //克隆與顯示列表信息
            foreach (UserVO userVo in listInfo)
            {
                UserList_Item item = CloneUserVoInfo();
                //克隆的對(duì)象丧靡,顯示信息
                item.DisplayUserItem(userVo);
                //加入集合保存
                _UserListInfo.Add(item);
            }
            //統(tǒng)計(jì)數(shù)量
            TxtUseListNumber.text = _UserListInfo.Count.ToString();
        }


        //凍結(jié)刪除按鈕
        public void FreezeDeleteButton()
        {
            btn_Delete.interactable = false;
        }

        //顯示刪除按鈕
        public void ShowDeleteButton()
        {
            btn_Delete.interactable = true;
        }

        #region 私有方法

        //克隆用戶信息
        private UserList_Item CloneUserVoInfo()
        {
            UserList_Item item = null;

            //參數(shù)檢查
            if (UserListItemPrefab!=null)
            {
                item=GameObject.Instantiate<UserList_Item>(UserListItemPrefab);
                //設(shè)置父節(jié)點(diǎn)
                item.transform.SetParent(UserListItemPrefab.transform.parent);
                //顯示克隆的節(jié)點(diǎn)
                item.gameObject.SetActive(true);
                //定義尺寸與相對(duì)位置
                item.transform.localScale = Vector3.one;
                item.transform.localPosition = Vector3.zero;
            }

            return item;
        }

        //用戶點(diǎn)擊“新用戶”按鈕
        private void ClickBtn_New()
        {
            if(NewUser!=null)
            {
                NewUser.Invoke();
            }
        }

        //用戶點(diǎn)擊“刪除”按鈕
        private void ClickBtn_Delete()
        {
            if (DeleteUser != null)
            {
                DeleteUser.Invoke();
            }
        }

        //清空列表信息
        private void ClearItems()
        {
            if (_UserListInfo!=null)
            {
                foreach (UserList_Item item in _UserListInfo)
                {
                    Destroy(item.gameObject);
                }
                _UserListInfo.Clear();
            }
        }

        #endregion

    }
}

UserList_Item

/***
 * 
 *    Title: "App應(yīng)用" 項(xiàng)目
 *           主題:使用PureMVC 架構(gòu)App示例應(yīng)用項(xiàng)目 
 *
 *           視圖層: 用戶列表信息(一條記錄)
 *    Description: 
 *           功能:顯示用戶列表蟆沫,一條記錄籽暇。
 *                  
 *    Date: 2021.4.9
 *    Version: 0.1版本
 *    Modify Recoder: 
 *    
 *   
 */
using System.Collections;
using System.Collections.Generic;
using System.Net.Mime;
using PureMVC.Patterns;
using UnityEngine;
using UnityEngine.UI;

namespace AppByPureMVC
{
    public class UserList_Item:MonoBehaviour
    {
        public Text TxtUserName;
        public Text TxtGender;
        public Text TxtDepartment;
        public Text TxtTel;
        public Text TxtEmail;
        //用戶當(dāng)前選擇的數(shù)據(jù)實(shí)體類
        private UserVO _CurrentUserSelectVO;
        //選擇控件
        private Toggle _ToggleUserItem;


        void Start()
        {
            //得到Togggle 控件
            _ToggleUserItem = this.GetComponent<Toggle>();
            //注冊Toggle 事件
            _ToggleUserItem.onValueChanged.AddListener(OnValuesChangByToggle);
        }


        /// <summary>
        /// 顯示用戶數(shù)據(jù)項(xiàng)(一條記錄)
        /// </summary>
        /// <param name="userData"></param>
        public void DisplayUserItem(UserVO userData)
        {
            if (userData!=null)
            {
                //保存當(dāng)前一條信息
                _CurrentUserSelectVO = userData;
                //顯示內(nèi)容
                if (TxtUserName) TxtUserName.text = userData.UserName;
                if (TxtGender)
                {
                    if (userData.Gender)
                    {
                        TxtGender.text = "男";
                    }
                    else
                    {
                        TxtGender.text = "女";
                    }
                }
                if (TxtDepartment) TxtDepartment.text = userData.Department;
                if (TxtTel) TxtTel.text = userData.Telephone;
                if (TxtEmail) TxtEmail.text = userData.Email;
            }
        }

        //用戶選擇事件
        public void OnValuesChangByToggle(bool isSelect)
        {
            if (isSelect)
            {
                //要把用戶選擇的信息,發(fā)送到“列表信息Mediator類”
                Facade.Instance.SendNotification(ProConsts.Msg_SelectUserInfoByCtrlToUserListMediator, _CurrentUserSelectVO);
            }
        }
    }
}

四饭庞、效果展示

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載戒悠,如需轉(zhuǎn)載請通過簡信或評(píng)論聯(lián)系作者。
  • 序言:七十年代末舟山,一起剝皮案震驚了整個(gè)濱河市救崔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捏顺,老刑警劉巖六孵,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異幅骄,居然都是意外死亡劫窒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門拆座,熙熙樓的掌柜王于貴愁眉苦臉地迎上來主巍,“玉大人,你說我怎么就攤上這事挪凑≡兴鳎” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵躏碳,是天一觀的道長搞旭。 經(jīng)常有香客問我,道長菇绵,這世上最難降的妖魔是什么肄渗? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮咬最,結(jié)果婚禮上翎嫡,老公的妹妹穿的比我還像新娘。我一直安慰自己永乌,他們只是感情好惑申,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著翅雏,像睡著了一般圈驼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枚荣,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天碗脊,我揣著相機(jī)與錄音,去河邊找鬼。 笑死衙伶,一個(gè)胖子當(dāng)著我的面吹牛祈坠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播矢劲,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼赦拘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了芬沉?” 一聲冷哼從身側(cè)響起躺同,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丸逸,沒想到半個(gè)月后蹋艺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡黄刚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年捎谨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片憔维。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涛救,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出业扒,到底是詐尸還是另有隱情检吆,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布程储,位于F島的核電站蹭沛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏虱肄。R本人自食惡果不足惜致板,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一交煞、第九天 我趴在偏房一處隱蔽的房頂上張望咏窿。 院中可真熱鬧,春花似錦素征、人聲如沸集嵌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽根欧。三九已至,卻和暖如春端蛆,著一層夾襖步出監(jiān)牢的瞬間凤粗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國打工今豆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嫌拣,地道東北人柔袁。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像异逐,于是被迫代替她去往敵國和親捶索。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容