Combobox选择索引是错误的

Cal*_*vin 2 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

表ITEM结果

0 -- a
1 -- b
2 -- c
3 -- d
Run Code Online (Sandbox Code Playgroud)

ben*_*rce 6

不要依赖于选定的索引,将ItemsSource ObservableCollection<T>绑定到a并将SelectedItem绑定到type属性,T并使用bound属性来读取选择.

如果您需要显示值与所选值不同,请将它们包装在一个小类中:

public class Item
{
  public int Code { get; set; }
  public string Display { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后您的ItemsSource绑定到一个属性:

public ObservableCollection<Item> Items { get; set; }

public int Selection { get; set; }
Run Code Online (Sandbox Code Playgroud)

您的DisplayMemberPath将显示

您的SelectedValuePath将是Code


而你的CombobBox Xaml将如下所示:

<ComboBox 
          ItemsSource="{Binding Path=Items}" 
          DisplayMemberPath="Display" 
          SelectedValuePath="Code" 
          SelectedValue="{Binding Path=Selection}"/>
Run Code Online (Sandbox Code Playgroud)