Ограничение CommandParameter SelectedIndex возвращает последний выбор, или -1 - PullRequest
0 голосов
/ 08 октября 2018

Я реализовал MVVM в WPF, и у меня есть ListView следующим образом:

<ListView DockPanel.Dock="Top" Name="ListViewMain" ItemsSource="{Binding Items}">

... GridView in ListView.View ...

    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <i:InvokeCommandAction Command="{Binding OnSelectionChangedCommand}"
                                   CommandParameter="{Binding SelectedIndex, 
                                       ElementName=ListViewMain}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</ListView>

Всякий раз, когда я меняю выбор, нажимая на любой элемент в ListView, OnSelectionChangedCommand вызывается с правильнымSelectedIndex.

Но когда я изменяю SelectedIndex программно следующим образом:

ListViewMain.SelectedIndex = 0;

, я получаю -1 в OnSelectionChangedCommand.Как получить правильный SelectedIndex независимо от способа изменения выбора?

Обновление

Ответы в WPF Listview SelectionChanged event не объяснитьчто произойдет, если SelectedIndex установлен программно, и как определить свойство модели представления, которое связано, выполните SelectedIndex.

1 Ответ

0 голосов
/ 09 октября 2018

Наконец-то у меня есть решение.ListView должен связывать SelectedIndex со свойством в модели представления:

<ListView DockPanel.Dock="Top" Name="ListViewMain" ItemsSource="{Binding Items}" 
          SelectedIndex="{Binding SelectedIndex}">

ListView не должно запускаться при событии SelectionChanged.

ListView.DataContext.SelectedIndex (свойство SelectedIndex) модели представления должно вызывать обработчик SelectionChanged:

public int SelectedIndex
{
    get => _selected_index;
    set
    {
        SetProperty(ref _selected_index, value);
        OnSelectionChangedCommand.Execute(_selected_index);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...