目前我在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");
});
}
}
但它拒绝......
其次我希望能够用参数引发事件(注意命令参数),但我从未使用它,因此我不明白如何使用它。
所以我的问题:
为什么我的relaycommand没有被执行?
如何使用命令参数?
答案 0 :(得分:4)
为什么我的继电器命令没有被执行? 如何使用命令参数?
如果您使用Josh Smith's article中的RelayCommand
课程,则两个问题都有相同的答案......构造函数需要Action<object>
,而不是Action
。所以你的代码应该是:
return new RelayCommand((param) =>
{
MessageBox.Show("Something is clicked - Parameter value = " + param);
});
RelayCommand
......这个类有两个版本,一个是通用的,一个不是。非泛型版本不接受参数,因此您需要通用版本。您的命令应如下所示:
public RelayCommand<int> ItemClicked
{
get
{
return new RelayCommand<int>((i) =>
{
MessageBox.Show("Something is clicked - Parameter value is " + i);
});
}
}
(假设参数类型为int
)
至于为什么你当前的代码不起作用,如果没有其他信息我就无法回答......