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