C# MVVM指示灯-事件到命令&;ListView-SelectedItem

C# MVVM指示灯-事件到命令&;ListView-SelectedItem,c#,mvvm,mvvm-light,eventtocommand,C#,Mvvm,Mvvm Light,Eventtocommand,我已经找遍了所有的答案,但运气不好。我使用的是MVVM Light,其中一个视图中有一个ListView。我想找到一种方法,在使用MVVM灯中内置的“事件到命令”单击我的ListView中的选定项时触发命令。在这一点上,我不知道如何去做这件事。如果你能给我任何帮助,我将不胜感激 从my GameView.xaml <ListView ItemsSource="{Binding Adventurers}" Name="AdvListView"

我已经找遍了所有的答案,但运气不好。我使用的是MVVM Light,其中一个视图中有一个ListView。我想找到一种方法,在使用MVVM灯中内置的“事件到命令”单击我的ListView中的选定项时触发命令。在这一点上,我不知道如何去做这件事。如果你能给我任何帮助,我将不胜感激

从my GameView.xaml

<ListView ItemsSource="{Binding Adventurers}"
              Name="AdvListView"
              ScrollViewer.CanContentScroll="False"
              Background="Gray"
              BorderBrush="Transparent"
              Grid.Column="1"
              Grid.ColumnSpan="3"
              Grid.Row="2">

        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Click">
                <cmd:EventToCommand Command="{Binding ShowAdvCommand}"
                                    CommandParameter="{Binding SelectedItem,
                                          ElementName=AdvListView}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>

        <ListView.View>
            <GridView>
                <GridViewColumn Width="Auto" Header="Name" DisplayMemberBinding="{Binding Name}" />
                <GridViewColumn Width="Auto" Header="Level" DisplayMemberBinding="{Binding Level}"/>
            </GridView>
        </ListView.View>
    </ListView>

在XAML中,您正在订阅单击的
事件。更改至
SelectionChanged
事件,以确保存在SelectedItem


单击列表视图并不总是选择项目。

尝试订阅SelectionChanged而不是Clicked事件可能会起作用。请解释命令代码的错误所在。@ernodeweard有效。如果你想提出这个答案,我很乐意接受。最后一件事,我如何在代码中访问所选项目(具体是关联的viewmodel)?该命令将是viewmodel的一部分,因此
将引用viewmodel。如果您对SelectedItem感兴趣,可以将其作为参数传递,但也可以向ViewModel添加依赖项属性,并将其绑定到ListView的SelectedItem属性。如果这样做,您可以通过访问dependency属性来访问所选项目。现在一切似乎都正常了。再次感谢你的帮助。很好!没问题,这就是我们来这里的目的:)
public ICommand ShowAdvCommand { get; private set; }
ShowAdvCommand = new RelayCommand(() => ExecuteShowAdvCommand(), () => true);

private void ExecuteShowAdvCommand()
{
    System.Windows.MessageBox.Show("Firing");
}