XAMLバインディングとViewModelを使用してパラメーターを使用してコマンドを実行します

StackOverflow https://stackoverflow.com/questions/5867241

質問

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

最初に、ボタンが私のviewmodelでイベントを上げることを望んでいるということです

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

しかし、それは拒否します...
第二に、私はパラメーターでイベントを提起できるようにしたいと思っています(CommandParameterに注意してください)が、私はそれを使用したことがないので、それを使用する方法がわかりません。

だから私の質問:

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

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

役に立ちましたか?

解決

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

あなたが使用している場合 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)

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top