选择列表框中的第一个项目

本文关键字:第一个 项目 列表 选择 | 更新日期: 2023-09-27 18:15:26

列表框作为richtextbox内的自动完成,我正在用集合中的项目填充它。我需要它自动选择第一个项目,每次列表框填充。

我该怎么做?

Thank you

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;
      }

选择列表框中的第一个项目

第一次加载

时可以在XAML中将SelectedIndex设置为0
<ListBox SelectedIndex="0" />

在代码隐藏中,您可以在加载项列表

之后执行此操作
        if (this.lst.Items.Count > 0)
            this.lst.SelectedIndex = 0;

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

  1. 添加属性SelectedValue到ViewModel;
  2. 加载(或添加)List后,您绑定到ListBox设置SelectedValuevaluesList.FirstOrDefault();
  3. 在XAML上,将ListBoxSelectedItem属性绑定到SelectedValue(来自ViewModel)并设置绑定Mode="TwoWay"

应该可以:

listBox1.SetSelected(0,true);

您不需要任何东西,只需要使用数据。你不应该对控制中心的样子感兴趣。(您不希望与该控件耦合)

<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
}