【问题标题】:Get combobox itemindex from string VB.NET Windows 8 metro app从字符串 VB.NET Windows 8 Metro 应用程序获取组合框 itemindex
【发布时间】:2015-04-07 20:09:24
【问题描述】:

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

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

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

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

重要事实:

  • CmbExample.FindStringCmbExample.IndexOf() 似乎不存在
  • CmbExample.SelectedItem = lstExample(i) 不起作用
  • CmbExample.FindName(lstExample(i)) 总是返回 0

是否有任何内置方法可以进行这种处理?

【问题讨论】:

    标签: .net vb.net windows-8 windows-store-apps microsoft-metro


    【解决方案1】:

    您可以使用IndexOf 方法在集合中查找项目的索引:

    index = cmbExample.Items.IndexOf(key)
    

    ComboBox 本身不包含字符串:它可以包含任何类型,包括字符串等简单类型或包含多个属性的复杂类型(例如 Person 类)

    通常,您会通过将数据绑定到集合而不是直接添加项目来填充 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)
    

    更典型地,组合框的数据将是更大数据对象的属性中的集合,该对象还包含页面的其余数据。该整体数据对象将被设置为页面的 DataContext 并由 ComboBox 继承。

    我不清楚 lstExample 和 cmbExample 之间的关系是什么,但您可以将它们绑定到相同(或相关数据),然后将它们相互绑定,让 Xaml 的数据绑定系统保持同步。

    从下面的 ListBox 中选择一个项目,ComboBox 将跟随:

    <ComboBox x:Name="cmbExample" ItemsSource={Binding} SelectedIndex="{Binding ElementName=lstExample, Path=SelectedIndex}" />
    <ListBox x:Name="lstExample" ItemsSource={Binding} />
    

    绑定的项目不必显示相同的内容。 ObservableCollection 可以包含更复杂的类型(例如,具有姓名、电话号码和地址属性的人员),列表框可​​以显示姓名,而组合框可以显示电话号码和地址。

    Xaml 的大部分功能及其优于 WinForms 的优势都来自 DataBinding。我强烈建议您学习如何这样做。您可以从 MSDN 上 Data binding (XAML) 主题中的文档开始。

    【讨论】:

      【解决方案2】:

      我找不到任何内置方法,因为没有地铁应用程序,所以我选择了我试图避免的经典 For 循环。

       For i = 0 To cmbExample.Items.Count - 1
          If cmbExample.Items(i).ToString = lstExample(i) Then
              cmbExample.SelectedIndex = i
          End If
       Next
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多