RelayCommand с параметрами - PullRequest
       34

RelayCommand с параметрами

0 голосов
/ 24 ноября 2011

Я использую инструментарий 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 голосов
/ 13 августа 2015

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"/>
0 голосов
/ 24 ноября 2011

В вашем сценарии вам не нужен параметр вообще, поскольку ваша модель представления имеет как коллекцию Pictures, так и метод GetInfoCommand - метод GetMetaData имеет доступ к коллекции, и вы можете просто получить доступ к первому элементу оттуда.

Если ваш вопрос заключается в том, как передать параметры - вы можете просто установить значение свойства CommandParameter вашей кнопки на какое-то значение или привязать его к тому, что вы хотите, и когда вы нажимаете кнопку - методы Execute и CanExecute будут переданы это значение в качестве аргумента.

...