从字符串 VB.NET Windows 8 metro app 中获取组合框项目索引
Get combobox itemindex from string VB.NET Windows 8 metro app
Objective :将组合框选择保存到字符串列表中,然后能够在所述字符串的正确索引处影响组合框。
影响字符串列表:lstExample(i) = cmbExample.SelectionBoxItem
这将获取要存储在数据库中的组合框的字符串值。之后,假设组合框的索引设置为 -1。
现在需要从列表中取出字符串值并将其放回组合框中。
重要事实:
CmbExample.FindString
和CmbExample.IndexOf()
似乎不存在
CmbExample.SelectedItem = lstExample(i)
无效
CmbExample.FindName(lstExample(i))
总是返回 0
是否有允许进行此类处理的内置方法?
我找不到 none-Metro Apps 中的任何内置方法,所以我使用了我试图避免的经典 For 循环。
For i = 0 To cmbExample.Items.Count - 1
If cmbExample.Items(i).ToString = lstExample(i) Then
cmbExample.SelectedIndex = i
End If
Next
您可以使用 IndexOf 方法在集合中找到项目的索引:
index = cmbExample.Items.IndexOf(key)
ComboBox 本身不包含字符串:它可以包含任何类型,包括字符串等简单类型或包含多个属性的复杂类型(例如 Person class)
通常,您会通过数据绑定到集合来填充 ComboBox,而不是直接添加项目。这个集合通常包含比字符串更复杂的数据类型,尽管裸字符串也可以。
然后您可以通过使用 IndexOf 方法搜索该集合而不是直接搜索 ComboBox.Items 来查找特定项目的索引:
假设字符串集合:
Dim data As New ObservableCollection(Of String)
设置为我们的 ComboBox 的 DataContext:
cb1.DataContext = data
<ComboBox x:Name="cb1" ItemsSource={Binding} />
然后我们可以通过搜索数据找到X的索引:
IndexOfX= data.IndexOf(X)
更典型的情况是,ComboBox 的数据是一个更大数据对象 属性 中的集合,该数据对象还包含页面的其余数据。该整体数据对象将设置为页面的 DataContext 并由 ComboBox 继承。
我不清楚 lstExample 和 cmbExample 之间的关系是什么,但您可以将它们绑定到相同(或相关数据),然后将它们相互绑定并让 Xaml 的数据绑定系统使它们保持同步。
Select 来自以下 ListBox 和 ComboBox 的项目将跟随:
<ComboBox x:Name="cmbExample" ItemsSource={Binding} SelectedIndex="{Binding ElementName=lstExample, Path=SelectedIndex}" />
<ListBox x:Name="lstExample" ItemsSource={Binding} />
绑定的物品不必显示相同的东西。 ObservableCollection 可以包含更复杂的类型(例如,具有 Name、PhoneNumber 和 Address 属性的 Person),ListBox 可以显示名称,而 ComboBox 可以显示 PhoneNumber 和地址。
Xaml 的大部分功能及其优于 WinForms 的优势都来自数据绑定。我强烈建议您学习如何操作。您可以从 MSDN 上 Data binding (XAML) 主题中的文档开始。
Objective :将组合框选择保存到字符串列表中,然后能够在所述字符串的正确索引处影响组合框。
影响字符串列表:lstExample(i) = cmbExample.SelectionBoxItem
这将获取要存储在数据库中的组合框的字符串值。之后,假设组合框的索引设置为 -1。
现在需要从列表中取出字符串值并将其放回组合框中。
重要事实:
CmbExample.FindString
和CmbExample.IndexOf()
似乎不存在CmbExample.SelectedItem = lstExample(i)
无效CmbExample.FindName(lstExample(i))
总是返回 0
是否有允许进行此类处理的内置方法?
我找不到 none-Metro Apps 中的任何内置方法,所以我使用了我试图避免的经典 For 循环。
For i = 0 To cmbExample.Items.Count - 1
If cmbExample.Items(i).ToString = lstExample(i) Then
cmbExample.SelectedIndex = i
End If
Next
您可以使用 IndexOf 方法在集合中找到项目的索引:
index = cmbExample.Items.IndexOf(key)
ComboBox 本身不包含字符串:它可以包含任何类型,包括字符串等简单类型或包含多个属性的复杂类型(例如 Person class)
通常,您会通过数据绑定到集合来填充 ComboBox,而不是直接添加项目。这个集合通常包含比字符串更复杂的数据类型,尽管裸字符串也可以。
然后您可以通过使用 IndexOf 方法搜索该集合而不是直接搜索 ComboBox.Items 来查找特定项目的索引:
假设字符串集合:
Dim data As New ObservableCollection(Of String)
设置为我们的 ComboBox 的 DataContext:
cb1.DataContext = data
<ComboBox x:Name="cb1" ItemsSource={Binding} />
然后我们可以通过搜索数据找到X的索引:
IndexOfX= data.IndexOf(X)
更典型的情况是,ComboBox 的数据是一个更大数据对象 属性 中的集合,该数据对象还包含页面的其余数据。该整体数据对象将设置为页面的 DataContext 并由 ComboBox 继承。
我不清楚 lstExample 和 cmbExample 之间的关系是什么,但您可以将它们绑定到相同(或相关数据),然后将它们相互绑定并让 Xaml 的数据绑定系统使它们保持同步。
Select 来自以下 ListBox 和 ComboBox 的项目将跟随:
<ComboBox x:Name="cmbExample" ItemsSource={Binding} SelectedIndex="{Binding ElementName=lstExample, Path=SelectedIndex}" />
<ListBox x:Name="lstExample" ItemsSource={Binding} />
绑定的物品不必显示相同的东西。 ObservableCollection 可以包含更复杂的类型(例如,具有 Name、PhoneNumber 和 Address 属性的 Person),ListBox 可以显示名称,而 ComboBox 可以显示 PhoneNumber 和地址。
Xaml 的大部分功能及其优于 WinForms 的优势都来自数据绑定。我强烈建议您学习如何操作。您可以从 MSDN 上 Data binding (XAML) 主题中的文档开始。