2

我有一个调用和加载我的组合框的方法。拨打电话后,我将“全部”添加到组合框中的第一位。不幸的是,当它被添加到列表中时,“All”的索引为 0,这会搞砸一切。selectedindex 应该是表中的“a”。有没有办法将“全部”设置为 -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;
    }
}

表 ITEM 结果

0 -- a
1 -- b
2 -- c
3 -- d
4

2 回答 2

6

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

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

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 将是Display

您的 SelectedValuePath 将是代码


您的 CombobBox 的 Xaml 将如下所示:

<ComboBox 
          ItemsSource="{Binding Path=Items}" 
          DisplayMemberPath="Display" 
          SelectedValuePath="Code" 
          SelectedValue="{Binding Path=Selection}"/>
于 2012-08-09T22:21:32.440 回答
4

组合框中项目的索引从零开始,因此您无法在“-1”处添加项目。“-1”的选定索引意味着您没有选择任何项目。

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

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

...

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

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

于 2012-08-09T21:10:06.063 回答