一、collection
如果设计如下页面
页面模型如下
using UnityEngine;
using System.Collections;
using System.Collections.Generic; using MyUtils; public class Product : EZData.Context
{
#region Property Name
#endregion #region Property Price
#endregion #region Property Model
#endregion #region Property PicUrl
#endregion #region Property Pic //Texture2D
#endregion public void SetTexture2D(Texture2D tar) {
Pic = tar;
} //set current product
public void SetCurrentProduct() {
Messenger.Broadcast<Product>(EventSignal.Select_Current_Product.ToString(), this);
}
} public class CommodityPage<T> : EZData.Context
where T : EZData.Context
{
//列的集合
#region Collection Page
#endregion
} public class Category<T> : EZData.Context
where T : EZData.Context
{
//row list
#region Collection Table
#endregion #region Property Name
#endregion public void LoadTable(T[] Array, int PageNum)
{
}
} public class CategroyUi : EZData.Context
{
#region Collection CategoryList
#endregion #region Property NowSelectProduct
#endregion public ICategory_Product_Dao Ca_Pr_dao; public CategroyUi(ICategory_Product_Dao Ca_Pr_dao)
{
this.Ca_Pr_dao = Ca_Pr_dao; List<CategoryBean> mycategorylist = Ca_Pr_dao.getAllCategory(); foreach (CategoryBean item in mycategorylist)
{
CategoryList.Add(new Category<Product>() { Name = item.Name });
} for (int i = ; i < mycategorylist.Count; i++)
{
List<ProductBean> collection = Ca_Pr_dao.getProductListByCategoryId(mycategorylist[i].Id); Product[] Product_collection = GetArray(collection); CategoryList.GetItem(i).LoadTable(Product_collection, );
} //使用ngui master path
//path = CategoryList.SelectedItem.Table.SelectedItem.Page.SelectedItem
//这样形式是不可以的,只有CategoryList.SelectedItem 是可以使用的 //这里千万不要这么引用
//比如这里引用第一行第一个的数据
//之后你改为第一行第二个的数据
//NowSelectProduct 引用的是第一行第一个 那么第一行第一个的数据也改为第一行第二个
//NowSelectProduct = CategoryList.GetItem(0).Table.GetItem(0).Page.GetItem(0); //新new 一个 不要引用相同的
//一定要对其最开始就进行初始化 之后改变这个类的属性 不能改变这个类的引用
Product tmp = CategoryList.GetItem().Table.GetItem().Page.GetItem();
NowSelectProduct = new Product() { Name = tmp.Name, Price = tmp.Price, Model = tmp.Model, PicUrl = tmp.PicUrl };
Ca_Pr_dao.GetPicureByProductNameOrUrl(NowSelectProduct.Name, NowSelectProduct.PicUrl, NowSelectProduct.SetTexture2D); //监听当前选择的改变
Messenger.AddListener<Product>(
EventSignal.Select_Current_Product.ToString(), SelectCurrentProduct);
} public void SelectCurrentProduct(Product cur)
{
//这里不能改引用 只能赋值
NowSelectProduct.Name = cur.Name;
NowSelectProduct.Price = cur.Price;
NowSelectProduct.Model = cur.Model;
NowSelectProduct.PicUrl = cur.PicUrl;
UnityEngine.Debug.Log("SelectCurrentProduct" + NowSelectProduct.Name);
Ca_Pr_dao.GetPicureByProductNameOrUrl(NowSelectProduct.Name, NowSelectProduct.PicUrl, NowSelectProduct.SetTexture2D);
} #region 功能函数
Product[] GetArray(List<ProductBean> collection)
{
int length = collection.Count; Product[] result = new Product[length];
for (int i = ; i < length; i++)
{
ProductBean tmp = collection[i];
result[i] = new Product() { Name = tmp.Name, Price = tmp.Price, Model = tmp.Size, PicUrl = tmp.PicUrl};
Ca_Pr_dao.GetPicureByProductNameOrUrl(result[i].Name, result[i].PicUrl, result[i].SetTexture2D);
}
return result;
}
#endregion
} public class CategoryViewModel : MonoBehaviour
{
public NguiRootContext View; public CategroyUi Context; public void Init(NguiRootContext View)
{
this.View = View;
Context = new CategroyUi(new CategoryModel());
View.SetContext(Context);
}
}
2、关于NguiTextBinding
拖一个输入框如下:
Control - Simple Input Field
-》 Label
附加脚本如下:
Control - Simple Input Field
Label
ViewModel 对应如下:
#region Property MessageLeave
private readonly EZData.Property<string> _privateMessageLeaveProperty
= new EZData.Property<string>();
public EZData.Property<string> MessageLeaveProperty
{ get { return _privateMessageLeaveProperty; } }
public string MessageLeave
{
get { return MessageLeaveProperty.GetValue(); }
set { MessageLeaveProperty.SetValue(value); }
}
#endregion public void SendMessage() {
Debuger.Log("LeaveMessage is :"+ MessageLeave);
}
void SendMessage() 绑定一个按钮,MessageLeave 绑定刚才的label,按钮点击,结果如下
但如果只保留label:
附加脚本如下:
同样的ViewModel,结果如下
可以得到绑定,无语了,这个BUG。还有我建议Text CommitBind 能不用就不用。
三、NguiTextureBinding
这里要修改一下,如果采用material的话,那么同一个材质的图片都是一样的了。