我在我的应用程序中使用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代码和命令才能使其正常工作?
答案 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"/>