XAMLバインディングとViewModelを使用してパラメーターを使用してコマンドを実行します
-
28-10-2019 - |
質問
現在、私は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に注意してください)が、私はそれを使用したことがないので、それを使用する方法がわかりません。
だから私の質問:
なぜ私のリレーコマンドが実行されないのですか?
コマンドパラメーターを使用するにはどうすればよいですか?
解決
なぜ私のリレーコマンドが実行されないのですか?
コマンドパラメーターを使用するにはどうすればよいですか?
あなたが使用している場合 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
)
現在のコードが機能しない理由については、追加情報なしでは答えることができません...
所属していません StackOverflow