Combobox选择索引是错误的

时间:2012-08-09 21:00:16

标签: c# wpf

我有一个调用和加载我的组合框的方法。一旦打完电话,我就将“全部”添加到组合框中。不幸的是,当这个被添加到列表中时,“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

2 个答案:

答案 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”表示您没有选择任何项目。

请参阅http://msdn.microsoft.com/en-US/library/system.windows.controls.primitives.selector.selectedindex.aspx

  

获取或设置当前选择中第一个项目的索引,如果选择为空,则返回负一个(-1)。

     

...

     

在支持多个选择的选择器中设置SelectedIndex会清除现有的选定项目,并将选择设置为索引指定的项目。如果选择为空,则SelectedIndex返回-1。

     

如果将SelectedIndex设置为小于-1的值,则抛出ArgumentException。如果将SelectedIndex设置为等于或大于子元素数的值,则忽略该值。