我对Wpf中的ListBox有一个奇怪的问题,我将ListBox SelectedIndex绑定到viewModel对象中的属性。
如果SelectedIndex小于零,则不会选择任何列表框项。但是,如果SelectedIndex设置为大于列表实际大小的数字,则仍会选择最后一项!
当SelectedIndex设置为比最后一项索引更高的值时,有没有办法让listBox不选择最后一项?
由于
答案 0 :(得分:3)
按照惯例,SelectedIndex为-1表示没有选择;这就是为什么负值不会导致列表框中的选择。
为了更紧密地控制选择,您可以绑定到ICollectionView而不是直接绑定到集合(实际上这是我在做MVVM时总是建议的),并使用yourView.MoveCurrentTo ...方法控制选择。 例如:
ListCollectionView cv = new ListCollectionView(sourceCollection); // bind the listbox's ItemsSource to this
cv.MoveCurrentTo(null); // no selection;
cv.MoveCurrentToLast();
答案 1 :(得分: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(...)
}
}