我有一个调用和加载我的组合框的方法。一旦打完电话,我就将“全部”添加到组合框中。不幸的是,当这个被添加到列表中时,“All”的索引为0会使一切变得混乱。 selectedindex应该是表格中的“a”。有没有办法将“All”设置为-1作为索引?什么是将“a”作为索引0而不是索引1的最佳方法?
private void Load()
{
List<string> all = dataSource.GetAll();
if (all.Count > 1)
{
cbAll.Items.Clear();
cbAll.BeginUpdate();
cbAll.Items.Add("All");
foreach (var item in all)
{
cbAll.Items.Add(item);
}
cbAll.SelectedIndex = 0;
}
}
表项目结果
0 -- a
1 -- b
2 -- c
3 -- d
答案 0 :(得分:6)
不要依赖于所选索引,将ItemsSource绑定到ObservableCollection<T>
并将SelectedItem绑定到类型T
的属性,并使用bound属性来读取选择。
如果您需要显示值与所选值不同,请将它们包装在一个小类中:
public class Item
{
public int Code { get; set; }
public string Display { get; set; }
}
然后您的ItemsSource绑定到一个属性:
public ObservableCollection<Item> Items { get; set; }
public int Selection { get; set; }
您的DisplayMemberPath将显示
您的SelectedValuePath将是代码
而CombobBox的Xaml将如下所示:
<ComboBox
ItemsSource="{Binding Path=Items}"
DisplayMemberPath="Display"
SelectedValuePath="Code"
SelectedValue="{Binding Path=Selection}"/>
答案 1 :(得分:4)
组合框中项目的索引基于零,因此无法在“-1”处添加项目。选定的索引“-1”表示您没有选择任何项目。
获取或设置当前选择中第一个项目的索引,如果选择为空,则返回负一个(-1)。
...
在支持多个选择的选择器中设置SelectedIndex会清除现有的选定项目,并将选择设置为索引指定的项目。如果选择为空,则SelectedIndex返回-1。
如果将SelectedIndex设置为小于-1的值,则抛出ArgumentException。如果将SelectedIndex设置为等于或大于子元素数的值,则忽略该值。