WPF编游戏系列 之五 数据绑定
在上一篇通过用户控件将重复使用的控件封装为一个控件组,大大减少了C#代码数量,本篇继续对该控件组进行数据绑定,节省为每个控件赋值的工作。对于数据绑定具体内容的在这里就不多说了,有许多相关资料可以参考,博客园的达人们肯定也有相关教程。
1. 创建一个GoodsInfo类,其中包括GoodsImage、GoodsPrice、GoodsQty、GoodsBuyImageTag 这四个属性。
using System; namespace XMarket { class GoodsInfo { public string GoodsImage { get; set; } public string GoodsPrice { get; set; } public string GoodsQty { get; set; } public string GoodsBuyImageTag { get; set; } } }
2. 使用{Binding Property} 为控件组增加绑定内容,再次打开GoodsElement.xaml控件,将GoodsImage、GoodsPrice、GoodsQty、GoodsBuyImageTag 绑定到相应的控件中。
... ... <StackPanel Orientation="Vertical" HorizontalAlignment="Center" Margin="5"> <Image Name="goodsImage" Height="80" Width="80" Margin="5"
Source="{Binding GoodsImage}"></Image> <TextBlock Name="goodsPrice" Margin="5"
Text="{Binding GoodsPrice}"></TextBlock> <TextBlock Name="goodsQty" Margin="5"
Text="{Binding GoodsQty}"></TextBlock> <Image Name="goodsBuy" Source="image/add.png" Height="25" Width="25" Cursor="Hand" Margin="5" Tag="{Binding GoodsBuyImageTag}"> <Image.ToolTip>Add Quantity</Image.ToolTip> </Image> </StackPanel> ... ...
3. 数据绑定完毕,再回到上一篇(WPF编游戏系列 之四 用户控件)“3.” 部分的C#进行优化。
for (int i = 0; i < num; i++) { //创建一个goodsinfo实例 GoodsInfo goodsinfo = new GoodsInfo();
//为goodsinfo中的属性赋值 goodsinfo.GoodsImage = "image/shop/" + res[i, 2].ToString(); goodsinfo.GoodsPrice = "Price: $" + res[i, 6].ToString(); goodsinfo.GoodsQty = "Quantity: " + res[i, 5].ToString(); goodsinfo.GoodsBuyImageTag = res[i, 0].ToString() + "-" +
res[i, 5].ToString() + "-" + res[i, 6].ToString(); //创建goods控件组 GoodsElement goods = new GoodsElement();
//这里只需将goodsinfo赋给DataContext即可,就不用再对Text、Source等赋值了 goods.DataContext = goodsinfo;
… …
}
另,有个问题,在3中从数据库读取的物品信息都是通过for循环中同一个goodsinfo创建出来的,如果在界面中修改一个物品的数量,并同时将结果体现在Quantity的Textblock中,就会导致结果只在最后一个物品中体现,怎么样能使不同的物品创建不同的goodsinfo实例,或者有什么其他方法解决。
待续 … …
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
WPF编游戏系列 之二 图标效果
原文: WPF编游戏系列 之二 图标效果 本篇将要实现图标的两个效果:1. 显示图标标签,2. 图标模糊效果。在上一篇中提到Image没有HTML <img>的Title属性(在MSDN中也没找到类似的属性),所以本篇将自行制作一个标签,它的功能是当鼠标移动到图标上方时会显示该图标的Tag说明,并且该图标模糊显示,如下图对比所示。 原始状态 效果状态 1. 在Home <Image>中加入MouseEnter和MouseLeave事件。 <Image Source="image/home.png" Width="110" Height="110" Tag="My Home" Canvas.Left="30" Canvas.Top="20" Cursor="Hand" MouseEnter="Image_BlurEffect_MouseEnter" MouseLeave="Image_BlurEffect_MouseLeave"></Image> 2. 事件加好了,就要为添加内容了。先看Image_BlurEffect_MouseEn...
- 下一篇
WPF编游戏系列 之四 用户控件
原文: WPF编游戏系列 之四 用户控件 在上一篇《WPF编游戏系列 之三 物品清单》中,对物品清单进行了演示,其中反复用到了同一组控件(如下图),而且 颜昌钢也指出在3.2.2中使用的C#代码过多,其实我在写这些代码时也有同感,的确很繁琐也不好维护。其实这组控件的结构就是:<StackPanel><Image><Textblock><Textblock><Image>这5个控件的组合,那么能否将其做成一个控件组呢?“用户控件”即可实现这个功能。 1. 创建一个用户控件,右键项目名称,Add->New Item,选择User Control,新建一个GoodsElement控件。 VS会在Solution Explorer中创建一个新的XAML文件。 2. 控件创建好,就要对它进行编辑了,打开GoodsElement.xaml,将之前重复使用的控件全部定义到这里。 <UserControl x:Class="XMarket.GoodsElement" xmlns="http://schemas.microsoft...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7设置SWAP分区,小内存服务器的救世主