Domanda

Attualmente ho in 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>

Ora la prima cosa è che desidero che il pulsante sollevi l'evento nel mio ViewModel

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

Ma rifiuta ...
In secondo luogo, voglio essere in grado di sollevare l'evento con un parametro (notare il CommandParameter) ma non l'ho mai usato e quindi non capisco come usarlo.

Quindi le mie domande:

  1. Perché il mio relayCommand non viene eseguito?

  2. Come faccio a utilizzare il parametro di comando?

È stato utile?

Soluzione

Perché il mio relayCommand non viene eseguito?
Come faccio a utilizzare il parametro di comando?

Se stai usando il RelayCommand classe da L'articolo di Josh Smith, entrambe le domande hanno la stessa risposta ... il costruttore prende un Action<object>, non un Action. Quindi il tuo codice dovrebbe essere:

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

EDIT: OK, quindi stai usando il RelayCommand Dalla luce MVVM ... ci sono due versioni di questa classe, una è generica e una no. La versione non generica non accetta un parametro, quindi hai bisogno della versione generica. Il tuo comando dovrebbe apparire così:

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

(Supponendo che il parametro sia di tipo int)

Per quanto riguarda il motivo per cui il tuo codice attuale non funziona, non posso rispondere senza ulteriori informazioni ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top