2011-11-22 59 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); 
相关问题