Выбор первого элемента в списке - PullRequest
10 голосов
/ 22 ноября 2011

Список работает как автозаполнение внутри 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 ]

28 голосов
/ 22 ноября 2011

Вы можете поместить SelectedIndex в 0 в XAML для первой загрузки

<ListBox SelectedIndex="0" />

В коде позади вы можете сделать это после загрузки списка элементов

        if (this.lst.Items.Count > 0)
            this.lst.SelectedIndex = 0;
11 голосов
/ 22 ноября 2011

Если вы используете MVVM, вы также можете попробовать другое решение:

  1. Добавить свойство с именем SelectedValue в ViewModel;
  2. После загрузки (или добавления) значений в List, который вы связываете с ListBox set SelectedValue с valuesList.FirstOrDefault();
  3. В XAML связать свойство SelectedItem ListBox с SelectedValue (из ViewModel) и установить привязку Mode="TwoWay"
2 голосов
/ 29 января 2013

Это должно работать:

listBox1.SetSelected(0,true);
0 голосов
/ 29 февраля 2012

Вам ничего не нужно, только данные, которые вы используете. Вам не должно быть интересно, как выглядит элемент управления. (Вы не хотите быть связанным с этим контролем)

<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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...