2010-08-27 2 views
0

У меня есть странная проблема с ListBox в Wpf, где у меня есть привязка к ListBox SelectedIndex к свойству объекта viewModel.[WPF]: странная проблема со списком ListBox

Если значение SelectedIndex меньше нуля, ни один из элементов списка не выбран. Однако, если для параметра SelectedIndex установлено большее число, чем фактический размер списка, последний элемент все еще выбран!

Есть ли способ, чтобы listBox не выбирал последний элемент, когда значение SelectedIndex установлено на большее значение, чем индекс последних элементов?

Благодаря

ответ

3

По соглашению, SelectedIndex -1 означает отсутствие выбора; поэтому отрицательные значения не приводят к выбору в списке.

Чтобы более точно контролировать выбор, вы можете привязываться к ICollectionView, а не непосредственно к коллекции (на самом деле это то, что я всегда рекомендую при выполнении MVVM), и управлять выбором с помощью myView.MoveCurrentTo ... методы. Пример:

ListCollectionView cv = new ListCollectionView(sourceCollection); // bind the listbox's ItemsSource to this 
cv.MoveCurrentTo(null); // no selection; 
cv.MoveCurrentToLast(); 
0

Одна идея может быть, чтобы запретить выбранный индекс будет больше, чем последний индекс.

public IEnumerable<object> Items {get; protected set;} //your collection 
private int m_selectedIndex; //the underlying data for your new property 

private int SelectedIndex //bind the SelectedIndex property of the listbox to this 
{ 
    get { return m_index; } 
    set 
    { 
     if (value < Items.Count -1) 
      m_index = value; 
     else 
      m_index = -1; 

     PropertyChanged(...) 
    } 
} 
Смежные вопросы