我似乎在列表框中遇到选定索引的问题。
列表框根据用户选择插入了各种项目。一个例子是:
LiIndex = ListBox1.Items.Count
ListBox1.Items.Insert(LiIndex, "Item1")
LiIndex = ListBox1.Items.Count
ListBox1.Items.Insert(LiIndex, "AND")
LiIndex = ListBox1.Items.Count
ListBox1.Items.Insert(LiIndex, "Item2")
LiIndex = ListBox1.Items.Count
ListBox1.Items.Insert(LiIndex, "AND")
LiIndex = ListBox1.Items.Count
ListBox1.Items.Insert(LiIndex, "Item3")
这一切都工作和显示没有问题。我遇到的问题是如果我选择两个AND中的第二个。如果我单击列表中的第二个“AND”,然后单击一个按钮来触发方法,则所选索引始终是第一个“AND”的索引。
Dim listIndex as integer = ListBox1.SelectedIndex
我无法理解为什么,列表框本身将始终显示第二个选中,但操作将针对第一个进行。
对于我出错的地方的任何想法都将不胜感激。
答案 0 :(得分:1)
它看起来不错,但我认为您创建的索引是错误的,或者您可能在单击按钮或其他内容时重置或取消选择列表框...
我做了这个并且它有效,我在选择第二个“AND”时得到index = 3(并且使用更清晰的语法)
ListBox1.Items.Insert(ListBox1.Items.Count, "Item1")
ListBox1.Items.Insert(ListBox1.Items.Count, "AND")
ListBox1.Items.Insert(ListBox1.Items.Count, "Item2")
ListBox1.Items.Insert(ListBox1.Items.Count, "AND")
ListBox1.Items.Insert(ListBox1.Items.Count, "Item3")
答案 1 :(得分:0)
您希望实现的Wathever,直接处理ListBox项目不是一个好的起点。
您应该使用ObservableList(Of String)作为代码的属性并绑定列表
在xaml。
之后,您的代码变为:MyItemList.Add(“My Item”)
问题可能来自在您的代码中使用SelectedItem或您正在显示的事实
同一个对象两次(我曾经在一个显示两次相同对象的CheckBox中有一个奇怪的行为)
你可以通过定义/使用类来存储数据来摆脱它:无论如何,它不仅仅是
关于一个字符串,不是吗?所以你可以有一个带有ToString Overload的ItemInfo类来显示它
或者在Window资源中定义一个DataInmplate,其中ItemInfo为DataType。
<DataTemplate DataType="{x:Type l:ItemInfo}">
<TextBlock Text="{Binding ItemText}" />
</DataTemplate>
在你使用的代码中,MyItemList现在是一个ObervableList(Of ItemInfo):MyList.Add(New ItemInfo(“some text”,...))
所以你永远不会有两次相同的项目。
更多工作,但在这里我们有更坚实的开始添加数据/功能。