从字符串 VB.NET Windows 8 metro app 中获取组合框项目索引

Get combobox itemindex from string VB.NET Windows 8 metro app

Objective :将组合框选择保存到字符串列表中,然后能够在所述字符串的正确索引处影响组合框。

影响字符串列表:lstExample(i) = cmbExample.SelectionBoxItem

这将获取要存储在数据库中的组合框的字符串值。之后,假设组合框的索引设置为 -1。

现在需要从列表中取出字符串值并将其放回组合框中。

重要事实:

是否有允许进行此类处理的内置方法?

我找不到 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) 主题中的文档开始。