2010-08-27 98 views
0

我有一個奇怪的問題與Wpf中的ListBox,其中我有一個ListBox SelectedIndex綁定到viewModel對象中的屬性。[WPF]:奇怪的問題與列表框

如果SelectedIndex小於零,則不會選擇任何列表框項目。但是,如果SelectedIndex設置爲比列表的實際大小更大的數字,則最後一個項目仍處於選中狀態!

當SelectedIndex被設置爲比最後的項目索引更高的值時,是否有辦法讓listBox不選擇最後一個項目?

謝謝

回答

3

按照慣例,-1的SelectedIndex表示沒有選擇;這就是爲什麼負值不會導致在列表框中進行選擇的原因。爲了更好地控制選擇,你可以綁定到ICollectionView,而不是直接綁定到集合上(事實上這是我在做MVVM時總是推薦的),並使用yourView.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(...) 
    } 
}