MVVM Light - 事件指挥& ListView - SelectedItem

时间:2013-06-04 05:41:00

标签: c# mvvm mvvm-light eventtocommand

我一直在寻找答案,没有运气。我正在使用MVVM Light,我的一个视图中有一个ListView。我希望找到一种方法来使用MVVM Light中内置的'Event to Command'单击ListView中的选定项来触发命令。在这一点上,我不知道如何去做这件事。任何你能给我的帮助都将不胜感激。

来自我的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>

我不完全确定在ListView中EventToCommand应该去哪里。另外,我知道这段代码完全不正确。

来自GameViewModel.cs

public ICommand ShowAdvCommand { get; private set; }
ShowAdvCommand = new RelayCommand(() => ExecuteShowAdvCommand(), () => true);

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

1 个答案:

答案 0 :(得分:2)

在XAML中,您正在订阅Clicked事件。更改为SelectionChanged事件以确保存在SelectedItem。

点击ListView并不总是选择一个项目。