[WPF]:使用ListBox的奇怪问题

时间:2010-08-27 13:31:07

标签: wpf listbox

我对Wpf中的ListBox有一个奇怪的问题,我将ListBox SelectedIndex绑定到viewModel对象中的属性。

如果SelectedIndex小于零,则不会选择任何列表框项。但是,如果SelectedIndex设置为大于列表实际大小的数字,则仍会选择最后一项!

当SelectedIndex设置为比最后一项索引更高的值时,有没有办法让listBox不选择最后一项?

由于

2 个答案:

答案 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(...)
    }
}