在.net中带字符串索引的下拉列表

本文关键字:索引 下拉列表 字符串 net | 更新日期: 2023-09-27 17:50:46

在。net中是否有类似的:

<select>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select> 

我的意思是建立一个下拉列表,为每个选项使用字符串索引,而不是使用数字索引。我浏览了所有的组合框的属性,我没有找到任何方法来做到这一点。

在.net中带字符串索引的下拉列表

答案是否定的,没有办法将字符串索引放入IEnumerable中,但在WPF中无论如何也不会这样做。有两种方法可以将选中的项从组合框中取出:SelectedIndex(总是int型)和SelectedItem。

SelectedIndex通常不使用,因为您通常不关心所选项的索引,而是关心所选项本身,这很容易通过…

SelectedItem:将这个属性绑定到一个集合类型的对象(在你的例子中是"CarManufacturer"),现在你自动拥有了整个对象,没有真正的理由要有一个"字符串"索引。您可以使用DisplayMemberPath来获得每个项目的"漂亮"名称。

<ComboBox SelectedItem={Binding SelectedManufacturer} DisplayMemberPath="Name" ItemsSource={Binding CarManufacturers}/>

还有"SelectedValue",它返回所选项目的"Display"字符串,但使用频率更低,因为它包含的信息不一定是后备集合中项目的唯一信息,因此对于检索所述项目不是很有用。有一些用例可以利用它。

你可以做你想做的,但不是真的。

WPF中的ComboBox有三个属性:

  • SelectedIndex:这是一个从零开始的整数,表示所选项目的索引值。
  • SelectedItem:这是绑定对象序列中实际选中的对象。
  • SelectedValue/SelectedValuePath:这两个属性一起使用,指向绑定对象的属性。

看这个问题/答案的一些很好的例子。


在您的示例中,您可以创建一个Tuple<string, string>序列(或任何表示该对的对象)并将其绑定到集合,然后利用SelectedValueSelectedValuePath来获取一个字符串值,同时使用DisplayMemberPath来显示另一个字符串值。

<ComboBox ItemsSource="{Binding Path=SomeCollection}"
          SelectedValue={Binding Path=SelectedOption}"
          SelectedValuePath="Item1"
          DisplayMemberPath="Item2" />