带参数的RelayCommand

时间:2011-11-24 17:30:47

标签: wpf binding mvvm mvvm-light relaycommand

我在我的应用程序中使用MVVM Light工具包并尝试学习传递命令。 我有以下XAML代码段:

<s:ScatterView x:Name="swPicture" ItemsSource="{Binding Pictures}" ItemTemplate="{StaticResource Scatter_Thumbnail}"/>
    <Button Content="Info" Width="40" Height="40"
                         Command="{Binding GetInfoCommand}"
                           Grid.Row="0" HorizontalAlignment="Left"/>

元素swPicture包含来自Pictures集合的项目源。作为暂时的测试我只有一张图片。

如何将参数作为参数传递给命令,即我的swPicture元素中的图片中的第一张图片?

暂时我可以触发单个命令而不带参数,并在模型中跟随命令处理程序,如下所示:

GetInfoCommand = new RelayCommand<Picture>(
            action=>
                {
                    GetMetaData();
                },
                g=>true); //Execute method

我的想法是我需要将集合中的第一张图片作为参数传递给我的命令,以便将其传递给GetMetaData,后者将接受此参数

如何更新我的XAML代码和命令才能使其正常工作?

2 个答案:

答案 0 :(得分:0)

在您的场景中,您根本不需要参数,因为您的视图模型同时具有Pictures集合和GetInfoCommand - GetMetaData方法可以访问集合,您可以从那里访问第一个元素。

如果您的问题是如何传递参数 - 您可以将按钮的CommandParameter属性的值设置为某个值或将其绑定到您想要的任何值,当您按下按钮时 - 将执行Execute和CanExecute方法这个价值作为一个论点。

答案 1 :(得分:0)

CommandParameter执行此操作

<s:ScatterView x:Name="swPicture" ItemsSource="{Binding Pictures}" ItemTemplate="{StaticResource Scatter_Thumbnail}"/>
    <Button Content="Info" Width="40" Height="40"
                         Command="{Binding GetInfoCommand}" CommandParameter="{Binding Pictures[0]}"
                           Grid.Row="0" HorizontalAlignment="Left"/>