我有一个ItemsControl控件,它的ItemsSource是一个ObservableCollection。DataTemplate内部有一个按钮。该按钮的Command属性绑定到ViewModel中的RelayCommand(我使用MVVM Light),而CommandParameter则绑定到ItemsSource中对应的项。
问题在于,由于某些原因,该命令永远不会触发。代码后台正常工作。当调试鼠标单击事件处理程序时,我可以看到发送方(Button类型)具有填充了正确数据的CommandParameter,而Command为空。
问题在于,由于某些原因,该命令永远不会触发。代码后台正常工作。当调试鼠标单击事件处理程序时,我可以看到发送方(Button类型)具有填充了正确数据的CommandParameter,而Command为空。
我错过了什么?
XAML:
<ItemsControl ItemsSource="{Binding Users}"
Margin="{StaticResource ContentMargin}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Margin="{StaticResource ImageButtonMargin}"
Style="{StaticResource ImageButtonStyle}"
Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}, Path=DataContext.UserSelectedCommand}"
CommandParameter="{Binding}">
<!--...-->
ViewModel:
private ObservableCollection<User> _users;
private RelayCommand<User> _userSelectedCommand;
public ObservableCollection<User> Users
{
get { return _users; }
set
{
_users = value;
RaisePropertyChanged();
}
}
public RelayCommand<User> UserSelectedCommand
{
get { return _userSelectedCommand; }
}
protected override sealed void SetCommands() // called in the constructor which is in turned called by SimpleIoc
{
userSelectedCommand = new RelayCommand<User>((user) => UserSeriesSelected(user));
}
private void UserSelected(User selectedUser)
{
}