1

現在、私は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>

最初に、ビューモデルでボタンがイベントを発生させることを望みます

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

しかし、それは拒否します...
2番目に、パラメーターを使用してイベントを発生できるようにしたいのですが (コマンドパラメーターに注意してください)、使用したことがないため、使用方法がわかりません。

だから私の質問:

  1. リレーコマンドが実行されないのはなぜですか?

  2. コマンド パラメータを使用するにはどうすればよいですか?

4

1 に答える 1

4

リレーコマンドが実行されないのはなぜですか?
コマンド パラメータを使用するにはどうすればよいですか?

Josh Smith の記事RelayCommandのクラスを使用している場合、両方の質問の答えは同じです... コンストラクターはではなくを受け取ります。したがって、コードは次のようになります。Action<object>Action

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

編集: わかりましたのでRelayCommand、MVVM Light から使用しています...このクラスには 2 つのバージョンがあり、1 つはジェネリックで、もう 1 つはそうではありません。非ジェネリック バージョンはパラメーターを受け入れないため、ジェネリック バージョンが必要です。コマンドは次のようになります。

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

(パラメータの型が であると仮定int)

現在のコードが機能しない理由については、追加情報がないと答えられません...

于 2011-05-03T09:24:51.073 に答える