我现在正在作一个WPF的项目,是用vb做的,现在出现了一个问题请各位大神们帮忙解决.
问题如下首先画面左边是一列占了画面3分之一宽的listbox,显示的一系列商品种类,然后右侧根据选择的商品种类,显示出不同的商品,点击商品会在商品的由上方出现一个显示数量的圆圈。
以上是画面的基本内容现在出现了一个问题,就是当我切换listboxitem的时候商品会重新加载,导致商品数量也从0开始,比如我选择了一类商品中的一个,商品右上方出现数量,这时候我切换到第二类商品后,再切换回第一类商品,第一类商品中我曾经选中的商品的数量还需要重新选择,右上角的圆圈会不见了,也就是重新加载,所以请问有什么办法能让切换商品种类后,刚才选择的商品数量也就是右上角的圆圈还是上一次选择的样子吗.
感谢各位的帮助
问题如下首先画面左边是一列占了画面3分之一宽的listbox,显示的一系列商品种类,然后右侧根据选择的商品种类,显示出不同的商品,点击商品会在商品的由上方出现一个显示数量的圆圈。
以上是画面的基本内容现在出现了一个问题,就是当我切换listboxitem的时候商品会重新加载,导致商品数量也从0开始,比如我选择了一类商品中的一个,商品右上方出现数量,这时候我切换到第二类商品后,再切换回第一类商品,第一类商品中我曾经选中的商品的数量还需要重新选择,右上角的圆圈会不见了,也就是重新加载,所以请问有什么办法能让切换商品种类后,刚才选择的商品数量也就是右上角的圆圈还是上一次选择的样子吗.
感谢各位的帮助
选中商品就加入HashTable,取消选中从HashTable中删除;
每次点击商品种类刷新商品列表时,对每个商品,检查是否存在HashTable中,如果存在就自动标记为选中。
并且它也没有什么“缓存”机制,如果要达到这种效果,必须是自己处理。象你这种应用,这个“缓存”其实就是一种“数据结构”而已。
但使用“缓存”,必须要“保证一定时期内信息不变”,否则不适合。
比如你这个:在这个“操作窗口关闭之前”,每个商品类对应的商品列表不变,可以用如下结构缓存:
Private Type RecCache
GoodsName() As String ' 商品名列表
GoodsSelect() As Boolean ' 选择状态
GoodsType As Long ' 类别标识
GoodsItem As Long ' 商品数量
GoodsSelNum As Long ' 选择项总数
End Type
按你在主贴中的描述,你“右边”那个ListBox应该是“多选”列表吧!
因此用一个数组GoodsSelect()来记录每一个列表项的选择状态(“选定”或“未选定”),
而GoodsSelNum就直接记录“被选择的有多少项”了,
因为你要进行数量提示,在“操作过程中”选择项有改变时,这个数量是“实时变化”的,
因此用一个参数直接记录下来,用不着在每次从“缓存”中加载列表、设置状态后,
还要去“统计”一下选择了多少项。
如果用“动态数组”来记录缓存,GoodsType则是标识这个“缓存记录”是属于“哪个商品类”的,
记录下左边的“商品类序号”就行了,序号对应“左边列表的顺序”,从1开始标识。
当然如果“商品类”不是很多,则可以用一个“固定大小的动态数组”来做“缓存记录表”;
如果商品类的数量是确定的,直接用“固定数组”来声明“缓存记录表”也可以;
如果商品类“最多有xxx个”,同样可以直接声明一个固定数组,几百、几千的都无所谓。
因为现在的计算机内存都是以“GB”计,1万个的“缓存表”,初始内存占用不到200KB。
用“固定缓存表”(固定数组,或一开始就按商品类总数申请的一个足够大的“动态数组”),
就不用去“查有没有此类的缓存”,因为左边商品类的“列表索引”值直接跟缓存表的元素下标对应,
这时“GoodsType”这个成员则用来标识“此商品有没有被缓存”。
如果某类商品“有缓存”,从缓存表的对应记录中加载商品列表、设置“选择状态”等;
否则,去查询该类有哪些商品,把它显示到“右边”的列表中时,也把它记录到“缓存表”对应项的GoodsName()中。
………………
先说到这儿吧,自己去体会一下…………