选择列表框中的第一项

时间:2011-11-22 03:57:48

标签: c# wpf listbox

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

我该怎么做?

谢谢

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 个答案:

答案 0 :(得分:27)

首次加载时,您可以将 SelectedIndex 添加到XAML中 0

<ListBox SelectedIndex="0" />

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

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

答案 1 :(得分:11)

如果您正在使用MVVM,那么您也可以尝试其他解决方案:

  1. 将名为SelectedValue的属性添加到ViewModel;
  2. 将值List加载(或添加)到ListBox集合SelectedValue valuesList.FirstOrDefault();
  3. 在XAML上将SelectedItem的{​​{1}}属性绑定到ListBox (来自ViewModel)并设置绑定SelectedValue

答案 2 :(得分:2)

这应该有效:

listBox1.SetSelected(0,true);

答案 3 :(得分:0)

您不需要任何仅使用您使用的数据。你不应该对Control的外观感兴趣。 (你不想与那个控件配合使用)

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