一、案例说明
本篇承接上篇为基础,针对UI开发一个以PureMVC为框架思想的“增删改查”APP界面应用。
二、框架视图
三、关键代码
GameStart
/***
*
* Title: "App应用" 项目
* 主题:使用PureMVC 架构App示例应用项目
*
* 启动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()");
//启动框架
ApplicationFacade appFacade = ApplicationFacade.Instance as ApplicationFacade;
//启动项目
if (appFacade != null && UseEmpInfo != null)
{
appFacade.SendNotification(ProConsts.Com_InitMediator, UseEmpInfo);
}
}
}
}
ApplicationFacade
/***
*
* Title: "App应用" 项目
* 主题:使用PureMVC 架构App示例应用项目
*
* 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() + "/构造");
}
/// <summary>
/// PureMVC 得到实例引用
///
/// 得到“单例”且“线程安全”的引用
/// </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>
/// 注册模型层实例
/// </summary>
protected override void InitializeModel()
{
base.InitializeModel();
RegisterProxy(new UserProxy());
}
/// <summary>
/// 注册视图层实例
/// </summary>
protected override void InitializeView()
{
base.InitializeView();
RegisterMediator(new UserListMediator());
RegisterMediator(new UserFormMediator());
}
/// <summary>
/// 注册控制层实例
/// </summary>
protected override void InitializeController()
{
base.InitializeController();
RegisterCommand(ProConsts.Com_InitMediator,typeof(StartupApplication));
}
}
}
ProConsts
/***
*
* Title: "App应用" 项目
* 主题:使用PureMVC 架构App示例应用项目
*
* 定义项目中所有的“常量”
*
* 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";
//发送用户列表Mediator消息_增加用户记录
public const string Msg_AddNewUserInfoToUserListMed = "Msg_AddNewUserInfoToUserListMed";
//发送用户列表Mediator消息_更新用户记录
public const string Msg_UpdateUserInfoToUserListMed = "Msg_UpdateUserInfoToUserListMed";
//发送到列表信息Mediator 关于用户选择信息
public const string Msg_SelectUserInfoByCtrlToUserListMediator = "Msg_SelectUserInfoByCtrlToUserListMediator";
//发送到“用户窗体”Mediator类。
public const string Msg_SelUserInfoByUserListMedToUserFormMed = "Msg_SelUserInfoByUserListMedToUserFormMed";
}
}
UserEmployeeInfo
/***
*
* Title: "App应用" 项目
* 主题:使用PureMVC 架构App示例应用项目
*
* 帮助脚本
*
* 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应用" 项目
* 主题:使用PureMVC 架构App示例应用项目
*
* 控制层: 初始化用户列表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);
}
}
}
}
数据模型层 Mode
UserProxy
/***
*
* Title: "App应用" 项目
* 主题:使用PureMVC 架构App示例应用项目
* 模型层:代理类
* Description:
* 功能: 针对数据实体类,进行各种操作。
*
* 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>; }
}
//构造函数
public UserProxy():base(NAME,new List<UserVO>())
{
Log.Write(GetType() + "/构造");
AddUserItem(new UserVO("陆","毅",true,"技术研发部","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, "技术研发部", "01012345678", "luli@yahoo.cn"));
AddUserItem(new UserVO("沙", "宝亮", true, "技术研发部", "01012345678", "luli@yahoo.cn"));
Log.Write(GetType() + "/Users.count="+Users.Count);
}
//增加用户数据
public void AddUserItem(UserVO user)
{
if (user!=null)
{
Users.Add(user);
}
}
//更新数据
public void UpdateUserItems(UserVO user)
{
for (int i = 0; i < Users.Count; i++)
{
if (Users[i].Equals(user))
{
//更新
Users[i] = user;
break;
}
}
}
//删除数据
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应用" 项目
* 主题:使用PureMVC 架构App示例应用项目
*
* 模型层: 数据实体类
*
* 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; //联系方式
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;
}
//对象比较
public override bool Equals(object other)
{
bool boolResult = false; //返回结果
UserVO otherVO = null;
otherVO = other as UserVO;
if (otherVO!=null)
{
if (this.UserName==otherVO.UserName)
{
boolResult = true;
}
}
return boolResult;
}
}
}
视图交互层 View
UserListMediator
/***
*
* Title: "App应用" 项目
* 主题:使用PureMVC 架构App示例应用项目
*
* 视图层:用户列表信息操作类
*
* 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;
}
}
//当前用户选择的记录
private UserVO _CurrentSelectUserRecord = null;
public UserListMediator():base(NAME)
{
Log.Write(GetType() + "/构造");
//构造方法为空。
}
/// <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;
}
//加载且显示初始视图内容
Log.Write(GetType() + "/InitUserListMediator()/_UserProxy.Users.count="+_UserProxy.Users.Count);
userListObj.LoadAndShowUserListInfo(_UserProxy.Users);
}
/// <summary>
/// 本类实例在注册时候触发
/// </summary>
public override void OnRegister()
{
base.OnRegister();
//得到“用户代理”引用
_UserProxy = Facade.RetrieveProxy(UserProxy.NAME) as UserProxy;
}
/// <summary>
/// 所有关注的“消息”
/// </summary>
/// <returns></returns>
public override IList<string> ListNotificationInterests()
{
IList<string> list = new List<string>();
//初始化本类实例
list.Add(ProConsts.Msg_InitUserListMediator);
//本类(下级)控制脚本发来的选择信息
list.Add(ProConsts.Msg_SelectUserInfoByCtrlToUserListMediator);
//从UserFormMediate 发来信息:增加新用户
list.Add(ProConsts.Msg_AddNewUserInfoToUserListMed);
//从UserFormMediate 发来信息:更新用户信息
list.Add(ProConsts.Msg_UpdateUserInfoToUserListMed);
return list;
}
/// <summary>
/// 处理所有关注的“消息”
/// </summary>
/// <param name="notification"></param>
public override void HandleNotification(INotification notification)
{
switch (notification.Name)
{
//调用初始化方法
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 发来信息:增加新用户
case ProConsts.Msg_AddNewUserInfoToUserListMed:
UserVO userVoObj = notification.Body as UserVO;
SubmitNewUser(userVoObj);
break;
//从UserFormMediate 发来信息:更新用户信息
case ProConsts.Msg_UpdateUserInfoToUserListMed:
UserVO userVoObj2 = notification.Body as UserVO;
SubmitUpdateUserInfo(userVoObj2);
break;
default:
break;
}
}
#region 私有方法
//处理“选择用户操作”
private void HandelSelctUserInfo(UserVO userVO)
{
if (userVO!=null)
{
//保存当前用户选择的记录。
_CurrentSelectUserRecord = userVO;
//显示窗体“删除”按钮
_UserListProp.ShowDeleteButton();
//发送消息,发送“用户窗体”类。
SendNotification(ProConsts.Msg_SelUserInfoByUserListMedToUserFormMed, userVO);
}
}
//处理“新用户”操作
private void HandleNewUser()
{
//发送消息,给“用户(窗体)表单”视图。
SendNotification(ProConsts.Msg_ClearUserInfo);
}
//处理“删除用户”操作
private void HandleDeleteUser()
{
if (_UserProxy!=null && _CurrentSelectUserRecord!=null)
{
//代理层,调用删除方法
_UserProxy.DeleteUserItems(_CurrentSelectUserRecord);
//刷新“用户列表”
_UserListProp.LoadAndShowUserListInfo(_UserProxy.Users);
//通知“用户窗体”操作类,清空窗体信息
SendNotification(ProConsts.Msg_ClearUserInfo);
}
}
//提交(处理)增加“新用户”操作
private void SubmitNewUser(UserVO newUserVo)
{
//调用模型层代理方法,增加一条记录
if (_UserProxy!=null && newUserVo!=null)
{
_UserProxy.AddUserItem(newUserVo);
//刷新窗体信息
_UserListProp.LoadAndShowUserListInfo(_UserProxy.Users);
}
}
//提交(处理)更新用户信息操作
private void SubmitUpdateUserInfo(UserVO needUpdateUserVo)
{
//调用模型层代理方法,增加一条记录
if (_UserProxy != null && needUpdateUserVo != null)
{
_UserProxy.UpdateUserItems(needUpdateUserVo);
//刷新窗体信息
_UserListProp.LoadAndShowUserListInfo(_UserProxy.Users);
}
}
#endregion
}
}
UserFormMediator
/***
*
* Title: "App应用" 项目
* 主题:使用PureMVC 架构App示例应用项目
*
* 视图层: 用户窗体操作类
*
* 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
{
//创建(新用户)
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>
/// 构造函数
/// </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>
/// 关注消息内容
/// </summary>
/// <returns></returns>
public override IList<string> ListNotificationInterests()
{
IList<string> list=new List<string>();
//初始化本类实例
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>
/// 提交: 用户点击“确认”按钮,提交信息
/// </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 发送消息,增加一条新记录,且显示。
/// </summary>
private void AddNewUserInfo()
{
SendNotification(ProConsts.Msg_AddNewUserInfoToUserListMed,_UserForm_Prop.UserVO);
}
/// <summary>
/// 提交:更新用户信息
/// 功能:往“用户列表”Mediatro 发送消息,更新指定记录信息且显示。
/// </summary>
private void UpdateUserFrom(UserVO uservoObj)
{
SendNotification(ProConsts.Msg_UpdateUserInfoToUserListMed, uservoObj);
}
}
}
UserForm
/***
*
* Title: "App应用" 项目
* 主题:使用PureMVC 架构App示例应用项目
*
* 视图层: 用户信息窗体
*
* 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; //确认按钮
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;
//用户实体类
private UserVO _UserVO;
//(只读)属性
public UserVO UserVO
{
get { return _UserVO; }
}
void Start()
{
//注册按钮事件
BtnComfirm.onClick.AddListener(HandleConfirmButtonClick);
//冻结确认按钮
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 = "";
//冻结“确认”按钮
FreezeConfirmButton();
}
#region 私有方法
/// <summary>
/// 处理“确认”按钮
/// </summary>
private void HandleConfirmButtonClick()
{
//窗体数据合法性检查
if (!CheckUserForm())
{
return;
}
//调用委托
if (HandlerComfirmButton!=null)
{
HandlerComfirmButton.Invoke();
}
}
/// <summary>
/// 检查用户窗体信息(即:不允许用户输入“空”信息)
/// 返回:true 表示数据合法
/// </summary>
/// <returns></returns>
private bool CheckUserForm()
{
if (_UserVO==null)
{
_UserVO=new UserVO();
}
//获取数据
_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;
//数据检查
if (_UserVO.IsValid)
{
return true;
}
return false;
}
/// <summary>
/// 冻结确认按钮
/// </summary>
private void FreezeConfirmButton()
{
BtnComfirm.interactable = false;
}
/// <summary>
/// 显示“确认”按钮
/// </summary>
private void ShowConfirmButton()
{
BtnComfirm.interactable = true;
}
//检查控件输入信息
private void ClickInputControl(string strInput)
{
if (!string.IsNullOrEmpty(strInput))
{
//允许显示
ShowConfirmButton();
}
}
#endregion
}
}
UserList
/***
*
* Title: "App应用" 项目
* 主题:使用PureMVC 架构App示例应用项目
*
* 视图层: 用户列表信息脚本
*
* 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{
//系统委托
public System.Action NewUser; //新用户
public System.Action SelectUser; //选择用户信息
public System.Action DeleteUser; //删除用户信息
//用户列表
public UserList_Item UserListItemPrefab;
//文本控件
public Text TxtUseListNumber; //用户列表数量
//按钮控件
public Button btn_New; //新建用户控件
public Button btn_Delete; //删除用户控件
//用户列表信息集合
private List<UserList_Item> _UserListInfo = new List<UserList_Item>();
void Start()
{
//初始化字段
TxtUseListNumber.text = "0";
//设置隐藏
UserListItemPrefab.gameObject.SetActive(false);
//按钮事件注册
btn_New.onClick.AddListener(ClickBtn_New);
btn_Delete.onClick.AddListener(ClickBtn_Delete);
//默认,冻结删除按钮
FreezeDeleteButton();
}
/// <summary>
/// 提取显示用户列表信息
/// </summary>
/// <param name="listInfo">需要信息的信息集合</param>
public void LoadAndShowUserListInfo(IList<UserVO> listInfo )
{
//清空列表信息
ClearItems();
//克隆与显示列表信息
foreach (UserVO userVo in listInfo)
{
UserList_Item item = CloneUserVoInfo();
//克隆的对象,显示信息
item.DisplayUserItem(userVo);
//加入集合保存
_UserListInfo.Add(item);
}
//统计数量
TxtUseListNumber.text = _UserListInfo.Count.ToString();
}
//冻结删除按钮
public void FreezeDeleteButton()
{
btn_Delete.interactable = false;
}
//显示删除按钮
public void ShowDeleteButton()
{
btn_Delete.interactable = true;
}
#region 私有方法
//克隆用户信息
private UserList_Item CloneUserVoInfo()
{
UserList_Item item = null;
//参数检查
if (UserListItemPrefab!=null)
{
item=GameObject.Instantiate<UserList_Item>(UserListItemPrefab);
//设置父节点
item.transform.SetParent(UserListItemPrefab.transform.parent);
//显示克隆的节点
item.gameObject.SetActive(true);
//定义尺寸与相对位置
item.transform.localScale = Vector3.one;
item.transform.localPosition = Vector3.zero;
}
return item;
}
//用户点击“新用户”按钮
private void ClickBtn_New()
{
if(NewUser!=null)
{
NewUser.Invoke();
}
}
//用户点击“删除”按钮
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应用" 项目
* 主题:使用PureMVC 架构App示例应用项目
*
* 视图层: 用户列表信息(一条记录)
* 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;
//用户当前选择的数据实体类
private UserVO _CurrentUserSelectVO;
//选择控件
private Toggle _ToggleUserItem;
void Start()
{
//得到Togggle 控件
_ToggleUserItem = this.GetComponent<Toggle>();
//注册Toggle 事件
_ToggleUserItem.onValueChanged.AddListener(OnValuesChangByToggle);
}
/// <summary>
/// 显示用户数据项(一条记录)
/// </summary>
/// <param name="userData"></param>
public void DisplayUserItem(UserVO userData)
{
if (userData!=null)
{
//保存当前一条信息
_CurrentUserSelectVO = userData;
//显示内容
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)
{
//要把用户选择的信息,发送到“列表信息Mediator类”
Facade.Instance.SendNotification(ProConsts.Msg_SelectUserInfoByCtrlToUserListMediator, _CurrentUserSelectVO);
}
}
}
}
网友评论