web-dev-qa-db-ja.com

リストボックスで最初の項目を選択する

リストボックスは、リッチテキストボックス内でオートコンプリートとして機能します。コレクションのアイテムをリストボックスに入力しています。リストボックスが表示されるたびに最初のアイテムを自動選択する必要があります。

どうすればよいですか?

ありがとうございました

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

XAMLにSelectedIndexからを初めてロードする

<ListBox SelectedIndex="0" />

コードビハインドでは、アイテムリストを読み込んだ後にこれを行うことができます

        if (this.lst.Items.Count > 0)
            this.lst.SelectedIndex = 0;
29
Peter PAD

MVVMを使用している場合は、別の解決策を試すこともできます。

  1. SelectedValueというプロパティをViewModelに追加します。
  2. Listにバインドする値をListBoxにロード(または追加)した後、SelectedValue withvaluesList.FirstOrDefault();を設定します。
  3. XAMLで、SelectedItemListBoxプロパティを(ViewModelから)SelectedValueにバインドし、バインディングを設定しますMode="TwoWay"
12
Anatolii Gabuza

これは機能するはずです:

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