Pregunta

Actualmente tengo 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>

Ahora lo primero es que deseo el botón para elevar el evento en mi ViewModel

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

Pero se niega ...
En segundo lugar, quiero poder elevar el evento con un parámetro (observe el CommandParameter), pero nunca lo he usado y, por lo tanto, no entiendo cómo usarlo.

Entonces mis preguntas:

  1. ¿Por qué no se ejecuta mi comando de relevos?

  2. ¿Cómo uso el parámetro de comando?

¿Fue útil?

Solución

¿Por qué no se ejecuta mi comando de relevos?
¿Cómo uso el parámetro de comando?

Si estás usando el RelayCommand clasificarse de Artículo de Josh Smith, ambas preguntas tienen la misma respuesta ... el constructor toma un Action<object>, no un Action. Entonces su código debería ser:

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

Editar: OK, así que estás usando el RelayCommand De la luz MVVM ... Hay dos versiones de esta clase, una es genérica y otra no. La versión no genérica no acepta un parámetro, por lo que necesita la versión genérica. Tu comando debería verse así:

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

(suponiendo que el parámetro sea de tipo int)

En cuanto a por qué su código actual no funciona, no puedo responder sin información adicional ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top