WPF & Listview. Shift-выбор нескольких элементов. Неверный элемент запуска

1 ответов


Я спросил в MSDN об этой проблеме. Удивительно, но причиной этой проблемы является SelectionMode

проблема может быть в коде ListBox (ListView происходит от ListBox):

protected override void OnSelectionChanged(SelectionChangedEventArgs e)
{   ...
    if ((this.SelectionMode == SelectionMode.Single) && (base.SelectedItem != null))
    {
       ...
        if (selectedItem != null)
        {
            this.UpdateAnchorAndActionItem(selectedItem);
    }
}

UpdateAnchorAndActionItem (selectedItem) не вызывается, если SelectionMode расширен.

Итак, в коде позади вас нужно сделать следующее:

list.SelectionMode = SelectionMode.Single;
list.SelectedIndex = 4;
list.SelectionMode = SelectionMode.Extended;

не совсем понимаю, как быть в случае MVVM.

Upd1

Я создал пользовательский ListView. Это будет сделано внутри упомянутой выше логики. В этом случае он должен работать так, как вы ожидаете, даже в MVVM. Надеюсь, это вам поможет.

public class MyListView:ListView
{
    protected override void OnSelectionChanged(SelectionChangedEventArgs e)
    {
        //if it is multiselection than execute standard logic
        if(SelectedItems.Count!=1)
        {
            base.OnSelectionChanged(e);
            return;
        }
        var mode = SelectionMode;
        SelectionMode = SelectionMode.Single;
        base.OnSelectionChanged(e);
        SelectionMode=mode;
    }
}