Mvvm-легкая Silverlight, с помощью EventToCommand с Полем комбинированного списка

Я поднял трубку 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, таким образом, я думаю, что действительно пропускаю что-то очевидное здесь. Кто-либо может помочь?Заранее спасибо!

14
задан Noctis 2 May 2014 в 12:07
поделиться

1 ответ

После некоторого копания я обнаружил, что очень просто передать фактический 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];
}
20
ответ дан 1 December 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: