2011-11-22 82 views
7

列表框在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; 
     } 

回答

24

你可以把的SelectedIndex到在XAML首次裝載

<ListBox SelectedIndex="0" /> 

在代碼隱藏,你可以在加載項列表做到這一點

 if (this.lst.Items.Count > 0) 
      this.lst.SelectedIndex = 0; 
+0

這就是我已經和它不工作<列表框高度= 「67」 的Horizo​​ntalAlignment =「左「Name =」lb「VerticalAlignment =」Top「Width =」49「Visibility =」Collapsed「Margin =」12,32,0,0「ListBoxItem.Selected =」lbSelected「SelectedIndex =」0「/> – gumenimeda

+0

How to you you填充你的列表?我的意思是你使用綁定? –

+0

我編輯了我的回覆 –

9

如果你使用MVVM那麼你也可以嘗試另一種解決方案:

  1. 添加屬性稱爲SelectedValue到視圖模型;
  2. 加載(或相加)後的值到該綁定到ListBox設置SelectedValuevaluesList.FirstOrDefault();
  3. 在XAML的ListBoxSelectedItem屬性綁定到SelectedValue (從視圖模型),並設置結合Mode="TwoWay"
List
+0

我知道這已經過去了幾年,但它絕對應該是公認的答案! :) –

0

你不需要任何東西只是你使用的數據。您應該對控件的外觀感興趣。 (你不希望被加上對照)

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

可能是:

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

,它也能發揮作用。

列表框有這個類作爲一個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:對不起,我完全不明白你的任何例子如何真正回答這個問題。我認爲如果你能放入特定的代碼塊而不是整個虛擬機,這將會有所幫助。 – code4life

2

這應該工作:

listBox1.SetSelected(0,true); 
相關問題