列表框在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;
}
答案 0 :(得分:27)
首次加载时,您可以将 SelectedIndex 添加到XAML中 0
<ListBox SelectedIndex="0" />
在代码隐藏中,您可以在加载项目列表
后执行此操作 if (this.lst.Items.Count > 0)
this.lst.SelectedIndex = 0;
答案 1 :(得分:11)
如果您正在使用MVVM,那么您也可以尝试其他解决方案:
SelectedValue
的属性添加到ViewModel; List
加载(或添加)到ListBox
集合SelectedValue
valuesList.FirstOrDefault();
后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
}