リストボックスは、リッチテキストボックス内でオートコンプリートとして機能します。コレクションのアイテムをリストボックスに入力しています。リストボックスが表示されるたびに最初のアイテムを自動選択する必要があります。
どうすればよいですか?
ありがとうございました
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;
}
XAMLにSelectedIndexからを初めてロードする
<ListBox SelectedIndex="0" />
コードビハインドでは、アイテムリストを読み込んだ後にこれを行うことができます
if (this.lst.Items.Count > 0)
this.lst.SelectedIndex = 0;
MVVMを使用している場合は、別の解決策を試すこともできます。
SelectedValue
というプロパティをViewModelに追加します。List
にバインドする値をListBox
にロード(または追加)した後、SelectedValue
withvaluesList.FirstOrDefault();
を設定します。SelectedItem
のListBox
プロパティを(ViewModelから)SelectedValue
にバインドし、バインディングを設定しますMode="TwoWay"
これは機能するはずです:
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
}