我已经在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
绑定的视图模型的属性。
答案 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