Question

Actuellement, je suis en XAML:

<ItemsControl ItemsSource="{Binding Facilities, Mode=OneWay}">
 <ItemsControl.ItemTemplate>
  <DataTemplate>
   <Border Style="{StaticResource BorderStyleHeader}">
    <Grid>
     <Grid.RowDefinitions>
      <RowDefinition Height="33" />
      <RowDefinition Height="33" />
     </Grid.RowDefinitions>
     <Grid.ColumnDefinitions>
      <ColumnDefinition Width="150" />
      <ColumnDefinition Width="*" />
     </Grid.ColumnDefinitions>
     <TextBlock Text="{Binding Name}" HorizontalAlignment="Center" Grid.Row="0" Grid.Column="1" FontWeight="Bold" />
     <TextBlock Text="{Binding Description}" Grid.Row="1" Grid.Column="1" />
     <Button Content="Reserveer Nu" Style="{StaticResource ButtonStyle}" 
             Margin="5" Grid.Row="1" Grid.Column="0" 
             Command="{Binding Reservation.ItemClicked}" 
             CommandParameter="{Binding FacilityId}"/>
    </Grid>
   </Border>
  </DataTemplate>
 </ItemsControl.ItemTemplate>
</ItemsControl>

Maintenant, la première chose est que je souhaite sur le bouton pour déclencher l'événement dans mon viewmodel

public RelayCommand ItemClicked
{
    get
    {
        return new RelayCommand(() =>
        {
            MessageBox.Show("Something is clicked");
        });
    }
}

mais il refuse ...
d'autre part, je veux être en mesure de déclencher l'événement avec un paramètre (notez le CommandParameter) mais je ne l'ai jamais utilisé et donc je ne comprends pas comment l'utiliser.

Alors mes questions:

  1. Pourquoi pas mon RelayCommand en cours d'exécution?

  2. Comment puis-je utiliser du paramètre de commande?

Était-ce utile?

La solution

Pourquoi pas mon RelayCommand en cours d'exécution?
Comment puis-je utiliser du paramètre de commande?

Si vous utilisez la classe RelayCommand de Josh article de Smith , deux questions ont la même réponse ... le constructeur prend un Action<object>, pas Action. Donc, votre code devrait être:

    return new RelayCommand((param) =>
    {
        MessageBox.Show("Something is clicked - Parameter value = " + param);
    });

EDIT: OK, vous utilisez le RelayCommand de MVVM Light ... Il existe deux versions de cette classe, on est générique et ne l'est pas. La version non générique n'accepte pas un paramètre, vous devez donc la version générique. Votre commande devrait ressembler à ceci:

public RelayCommand<int> ItemClicked
{
    get
    {
        return new RelayCommand<int>((i) =>
        {
            MessageBox.Show("Something is clicked - Parameter value is " + i);
        });
    }
}

(en supposant que le paramètre est de type int)

Quant à savoir pourquoi votre code actuel ne fonctionne pas, je ne peux pas répondre sans plus d'informations ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top