在列表框中选择第一项

12

列表框在富文本框内作为自动完成功能。我正在使用集合中的项目来填充它。我需要它在每次填充列表框时自动选择第一个项目。

我该如何做呢?

谢谢。

foreach (var ks in ksd.FindValues(comparable))
      {
          lb.Items.Add(ks.Value);
      }

      if (lb.HasItems)
      {
          lb.Visibility = System.Windows.Visibility.Visible;
          lb.SelectedIndex = 0; //Suggested solution, still doesn't work 
      }
      else
      {
          lb.Visibility = System.Windows.Visibility.Collapsed;
      }
4个回答

36

在 XAML 中,您可以将 SelectedIndex 设置为 0 来实现首次加载。

<ListBox SelectedIndex="0" />
在代码后台,您可以在加载项目列表后执行此操作。
        if (this.lst.Items.Count > 0)
            this.lst.SelectedIndex = 0;

这是我的代码,但它没有起作用: <ListBox Height="67" HorizontalAlignment="Left" Name="lb" VerticalAlignment="Top" Width="49" Visibility="Collapsed" Margin="12,32,0,0" ListBoxItem.Selected="lbSelected" SelectedIndex="0" /> - gumenimeda
你是如何填充你的列表的?我的意思是,你使用数据绑定吗? - Peter PAD
不,我正在使用listbox.Items.Add()来填充它。谢谢帮助。 - gumenimeda
1
第一个选择项的索引为0。所以你可以像我的帖子一样做。(编辑后) - Peter PAD
还是不行,我的代码可能有问题。如果我想不出来,我会再仔细检查并发布它。谢谢。 - gumenimeda
对于 ListView,这只会选择第一项。如果你想要焦点,那么你可能需要做类似于 这样的事情 - The Lonely Coder

14

如果你在使用MVVM,那么你也可以尝试另一个解决方案:

  1. 在ViewModel中添加一个名为SelectedValue的属性;
  2. 在将值加载(或添加)到绑定到ListBoxList后,使用valuesList.FirstOrDefault();设置SelectedValue
  3. 在XAML中将ListBoxSelectedItem属性与来自ViewModel的SelectedValue绑定,并设置绑定Mode="TwoWay"

我知道已经过去了几年,但这绝对应该是被接受的答案! :) - Johnny Prescott

2
这应该可以运行:
listBox1.SetSelected(0,true);

-1

你只需要使用数据,不需要其他任何东西。你不应该关心控件的外观。(你不想与那个控件耦合在一起)

<ListBox ItemsSource="{Binding MyItems}" SelectedItem="{Binding MyItem}" />

可能是:

<SexyWoman Legs="{Binding MyItems}" Ass="{Binding MyItem}" />

它同样可以正常工作。

ListBox具有此类作为DataContext:

class DummyClass : INotifyPropertyChanged
{

    private MyItem _myItem;
    public MyItem MyItem
    {
        get { return _myItem; }
        set { _myItem = value; NotifyPropertyChanged("MyItem"); }
    }

    private IEnumerable<MyItem> _myItems;
    public IEnumerable<MyItem> MyItems
    {
        get { return _myItems; }        
    }

    public void FillWithItems()
    {
        /* Some logic */
        _myItems = ...

        NotifyPropertyChanged("MyItems");

        /* This automatically selects the first element */
        MyItem = _myItems.FirstOrDefault();
    }

    #region INotifyPropertyChanged Members
    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(string value)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(value));
        }
    }
    #endregion
}

1
-1:抱歉,我完全不明白你的任何示例如何回答手头的问题。如果您只能放入特定的代码块而不是整个VM,那将会很有帮助。 - code4life

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接