原文: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实例,或者有什么其他方法解决。

待续 … …

WPF编游戏系列 之五 数据绑定的更多相关文章

  1. WPF编游戏系列 之九 物品清单再优化

    原文:WPF编游戏系列 之九 物品清单再优化        在"第三篇"和"第四篇"中通过用户控件和数据绑定功能对物品清单进行一些优化减少了部分C#代码,但感觉 ...

  2. WPF编游戏系列 之八 银行界面及金额校验

    原文:WPF编游戏系列 之八 银行界面及金额校验        在前面<WPF编游戏系列 之四 用户控件>一文中通过用户控件创建了"My Shop"中物品列表框.本篇继 ...

  3. WPF编游戏系列 之七 动画效果(2)

    原文:WPF编游戏系列 之七 动画效果(2)        上一篇已经对关闭窗口图标进行了动画效果处理,本篇将对窗口界面的显示和关闭效果进行处理.由于所有的动画效果都是针对窗口界面的Canvas,所以 ...

  4. WPF编游戏系列 之六 动画效果(1)

    原文:WPF编游戏系列 之六 动画效果(1)        本篇主要针对界面进行动画效果处理.首先在打开或关闭界面时,使其产生动态效果而不是生硬的显示或消失(如下图).其次在鼠标放到关闭窗口图标上时, ...

  5. WPF编游戏系列 之三 物品清单

    原文:WPF编游戏系列 之三 物品清单        本篇将介绍如何通过C#自动生成游戏界面,主要演示点击"My Shop"后如何显示所有物品清单.其中数据源来自于Access 2 ...

  6. WPF编游戏系列 之四 用户控件

    原文:WPF编游戏系列 之四 用户控件        在上一篇<WPF编游戏系列 之三 物品清单>中,对物品清单进行了演示,其中反复用到了同一组控件(如下图),而且 颜昌钢也指出在3.2. ...

  7. WPF编游戏系列 之一 布局设计

    原文:WPF编游戏系列 之一 布局设计        本系列主要使用WPF和C#编写一个简单的小游戏(暂命名XMarket),意在通过该实例进一步学习和体验WPF,也欢迎广大同仁拍砖交流.言归正传,在 ...

  8. WPF编游戏系列 之二 图标效果

    原文:WPF编游戏系列 之二 图标效果        本篇将要实现图标的两个效果:1. 显示图标标签,2. 图标模糊效果.在上一篇中提到Image没有HTML <img>的Title属性( ...

  9. WPF入门教程系列二十三——DataGrid示例(三)

    DataGrid的选择模式 默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改 ...

随机推荐

  1. [RxJS] Split an RxJS observable with window

    Mapping the values of an observable to many inner observables is not the only way to create a higher ...

  2. ios开发事件处理之 四:hittest方法的底层实现与应用

    #import "XMGWindow.h" /** 1:注意点:hitTest方法内部会调用pointInside方法,询问触摸点是否在自己身上,当遍历子控件时,传入的坐标点要进行 ...

  3. ArcEngine开发之Command控件使用篇

    转自原文 ArcEngine开发之Command控件使用篇 在ArcEngine类库中有大量的Command控件用来与地图控件进行操作和交互.比如有一系列的地图浏览控件.地图查询控件.图斑选取控件.编 ...

  4. html5-2 html实体和颜色有哪些

    html5-2 html实体和颜色有哪些 一.总结 一句话总结:网站配色用安全色. 1.颜色用什么类型的颜色(安全色)? 直接百度搜 安全色 即可 2.html实体常用哪6个,头尾符号是什么? 头是取 ...

  5. TOP 10 ONLINE COMPILER

    Top 10 Online Compilers +1338 Tweet Share106 Share Pin 444 Shares Online compilers are one type of t ...

  6. 【hdu 3032】Nim or not Nim?

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...

  7. 自动化部署脚本,给每一台主机装上JDK,且配好环境变量

    centos6.7 当我们有很多台主机,想在每台机器上都安装一样的某些软件,当然,一台机器一台机器安装也是可以的,但是如果有一键安装所有机器上的软件那是不是很激动人心呢! 首先我们需要制作一台服务器, ...

  8. tolua#是Unity静态绑定lua的一个解决方案

    tolua#代码简要分析 2017-04-16 23:02 by 风恋残雪, 98 阅读, 1 评论, 收藏, 编辑 简介 tolua#是Unity静态绑定lua的一个解决方案,它通过C#提供的反射信 ...

  9. warning MSB3245: 未能解析此引用。未能找到程序集“CemeteryBLL”。请检查磁盘上是否存在该程序集。 如果您的代码需要此引用,则可能出现编译错误。

    多层架构,在每次重新生成解决方案的时候,老是提示:warning MSB3245: 未能解析此引用.未能找到程序集“CemeteryBLL”.请检查磁盘上是否存在该程序集. 如果您的代码需要此引用,则 ...

  10. Sleep(0)的妙用

    在线程中,调用sleep(0)可以释放cpu时间,让线程马上重新回到就绪队列而非等待队列,sleep(0)释放当前线程所剩余的时间片(如果有剩余的话),这样可以让操作系统切换其他线程来执行,提升效率. ...