Mvvm Light Silverlight,使用带有组合框的EventToCommand

Mvvm Light Silverlight,使用带有组合框的EventToCommand,silverlight,selecteditem,mvvm-light,Silverlight,Selecteditem,Mvvm Light,我已将组合框的SelectedItemChangeEvent连接到视图模型中的ICommand。一切似乎都很好,但我不知道如何获得ComboxBox的SelectedItem。我想我需要使用EventToCommand的CommandParameter——我是否将其绑定到ViewModel中具有组合框selectedItem的某个对象?我试过这个: <ComboBox Width="422" Height="24" DisplayMemberPath="Name" Ite

我已将组合框的SelectedItemChangeEvent连接到视图模型中的ICommand。一切似乎都很好,但我不知道如何获得ComboxBox的SelectedItem。我想我需要使用EventToCommand的CommandParameter——我是否将其绑定到ViewModel中具有组合框selectedItem的某个对象?我试过这个:

<ComboBox 
  Width="422"
  Height="24"
  DisplayMemberPath="Name"
  ItemsSource="{Binding CategoryTypes}"
  SelectedItem="{Binding SelectedCategory}"
  >
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <MvvmLight:EventToCommand 
              Command="{Binding SelectCategoryCommand,Mode=TwoWay}"
              CommandParameter="{Binding SelectedCategory, Mode=TwoWay}"
              MustToggleIsEnabledValue="True" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</ComboBox>
还有ICommand

public class SelectCategoryCommand : ICommand
{
    private RowViewModel _rowViewModel;

    public SelectCategoryCommand(RowViewModel rowViewModel)
    {
        _rowViewModel = rowViewModel;
    }

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        CategoryType categoryType = (CategoryType) parameter;
    }

}

但是,ICommand的Execute方法中的参数始终为null。我仍然对SilverLight缺乏经验,所以我想我真的错过了一些明显的东西。有人能帮忙吗?提前谢谢

在做了一些挖掘之后,我发现将实际的SelectionChangedEventArgs作为ICommand的执行参数传递非常简单:

只需设置
PassEventArgsToCommand=“True”


您可以尝试添加CommandParameter并将列表传递给relayCommand

本页底部描述了类似的内容,但使用了datagrid: 该页面中的代码如下所示:

<sdk:DataGrid x:Name="MyDataGrid" ItemsSource="{Binding Items}">
   <i:Interaction.Triggers> 
   <i:EventTrigger EventName="SelectionChanged">  
   <cmd:EventToCommand  Command="{Binding SelectionChangedCommand}"
                        CommandParameter="{Binding SelectedItems, ElementName=MyDataGrid}" />
   </i:EventTrigger>
   </i:Interaction.Triggers>
</sdk:DataGrid>

如果这样做,您的relayCommand将需要处理传入的参数。 在ViewModel中类似于以下内容:

public RelayCommand<IList> SelectionChangedCommand{    get;    private set;}
public RelayCommand SelectionChangedCommand{get;private set;}

SelectionChangedCommand=new RelayCommand(
项目=>
{
if(items==null)
{
NumberOfItemsSelected=0;
返回;
}
//在此处对作为列表中的参数传递的选定记录执行操作
//示例:NumberOfItemsSelected=items.Count;
});

你应该标记你的答案,尤其是因为它解决了你的问题。
public void Execute(object parameter)
{
    SelectionChangedEventArgs e = (SelectionChangedEventArgs)parameter;
    CategoryType categoryType = (CategoryType)e.AddedItems[0];
}
<sdk:DataGrid x:Name="MyDataGrid" ItemsSource="{Binding Items}">
   <i:Interaction.Triggers> 
   <i:EventTrigger EventName="SelectionChanged">  
   <cmd:EventToCommand  Command="{Binding SelectionChangedCommand}"
                        CommandParameter="{Binding SelectedItems, ElementName=MyDataGrid}" />
   </i:EventTrigger>
   </i:Interaction.Triggers>
</sdk:DataGrid>
public RelayCommand<IList> SelectionChangedCommand{    get;    private set;}
SelectionChangedCommand = new RelayCommand<IList>(
    items =>
    {
        if (items == null)
        {
            NumberOfItemsSelected = 0;
            return;
        }
        //Do something here with the records selected that were passed as parameters in the list
        //example:  NumberOfItemsSelected = items.Count;
    });