CommandParameter的绑定的SelectedIndex返回最后的选择,或-1

时间:2018-10-08 09:34:01

标签: c# wpf mvvm

我已经在WPF中实现了MVVM,并且具有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;

我在OnSelectionChangedCommand中得到-1。无论选择更改方法如何,我如何都能获得正确的SelectedIndex

更新

WPF Listview SelectionChanged event中的答案无法说明通过编程设置SelectedIndex时会发生什么,以及如何定义SelectedIndex绑定的视图模型的属性。

1 个答案:

答案 0 :(得分:0)

最后我找到了解决方案。 struct author : Codable{ var date: String var name: String } struct commit : Codable { var author: author var message: String? } struct commitJson : Codable { var sha: String var url: String var commit: commit } 应该将ListView与视图模型中的属性绑定:

SelectedIndex

<ListView DockPanel.Dock="Top" Name="ListViewMain" ItemsSource="{Binding Items}" SelectedIndex="{Binding SelectedIndex}"> 不应在ListView事件上触发。

SelectionChanged(视图模型的ListView.DataContext.SelectedIndex)属性应调用SelectedIndex处理程序:

SelectionChanged