Я поднял трубку SelectedItemChangeEvent ComboBox к ICommand, по моему мнению, модель. Все, кажется, хорошо работает однако, я не знаю, как получить SelectedItem ComboxBox. Я думаю, что должен использовать CommandParameter EventToCommand - я связываю это с чем-то в моем ViewModel, который имеет selectedItem ComboBox? Я попробовал это:
<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>
и по моему мнению модель:
public ICommand SelectCategoryCommand
{
get
{
return new SelectCategoryCommand(this);
}
}
public CategoryType SelectedCategory
{
get; set;
}
и 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 является всегда пустым. Я все еще довольно неопытен с Silverlight, таким образом, я думаю, что действительно пропускаю что-то очевидное здесь. Кто-либо может помочь?Заранее спасибо!
После некоторого копания я обнаружил, что очень просто передать фактический SelectionChangedEventArgs в качестве параметра execute ICommand:
Просто установите PassEventArgsToCommand="True"
<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}"
MustToggleIsEnabledValue="True"
PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
А затем в методе Execute сделайте что-то вроде:
public void Execute(object parameter)
{
SelectionChangedEventArgs e = (SelectionChangedEventArgs)parameter;
CategoryType categoryType = (CategoryType)e.AddedItems[0];
}