我现在正在作一个WPF的项目,是用vb做的,现在出现了一个问题请各位大神们帮忙解决.                  
问题如下首先画面左边是一列占了画面3分之一宽的listbox,显示的一系列商品种类,然后右侧根据选择的商品种类,显示出不同的商品,点击商品会在商品的由上方出现一个显示数量的圆圈。
以上是画面的基本内容现在出现了一个问题,就是当我切换listboxitem的时候商品会重新加载,导致商品数量也从0开始,比如我选择了一类商品中的一个,商品右上方出现数量,这时候我切换到第二类商品后,再切换回第一类商品,第一类商品中我曾经选中的商品的数量还需要重新选择,右上角的圆圈会不见了,也就是重新加载,所以请问有什么办法能让切换商品种类后,刚才选择的商品数量也就是右上角的圆圈还是上一次选择的样子吗.
感谢各位的帮助

解决方案 »

  1.   

    我手机发的帖子简单来说就是listbox变换后,每一次相当于重新加载了显示的数据,有什么方法可以不用每次重新加载,比如放在缓存中,只是不知道对不对该如何放
      

  2.   

    用一个HashTable记录已选择的全部(不分商品种类)商品;
    选中商品就加入HashTable,取消选中从HashTable中删除;
    每次点击商品种类刷新商品列表时,对每个商品,检查是否存在HashTable中,如果存在就自动标记为选中。
      

  3.   

    List(你的“右边”那个)内的内容,在每次“变换后”肯定是需要重新加载的!
    并且它也没有什么“缓存”机制,如果要达到这种效果,必须是自己处理。象你这种应用,这个“缓存”其实就是一种“数据结构”而已。
    但使用“缓存”,必须要“保证一定时期内信息不变”,否则不适合。
    比如你这个:在这个“操作窗口关闭之前”,每个商品类对应的商品列表不变,可以用如下结构缓存:
    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()中。
    ………………
    先说到这儿吧,自己去体会一下…………
      

  4.   

    ListBox 有一个属性叫做 ItemData,它为每一个列表项储存一个 Long 型的值,缺省是 0。你可以在选定某一个列表项并输入数量后,将你的“数量”值保存在相应的 ItemData 中:List1.ItemData(List1.ListIndex) = Text1你只要的 List1 的 Click 事件中加上Text1 = List1.ItemData(List1.ListIndex) 当选中已经设置了数量的列表项时,就显示出原来保存的数量;否则显示 0。