Mvvm-Light Silverlight, en utilisant EventToCommand avec un Combobox
J'ai accroché jusqu'à un ComboBox est SelectedItemChangeEvent à un ICommand dans mon modèle de vue. Tout semble fonctionner correctement mais je ne sais pas comment pour obtenir le SelectedItem de la ComboxBox. Je pense que j'ai besoin d'utiliser la CommandParameter de la EventToCommand - puis-je lier cela à quelque chose dans mon ViewModel qui a le selectedItem de la zone de liste déroulante? J'ai essayé ceci:
<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>
et, à mon avis, modèle:
public ICommand SelectCategoryCommand
{
get
{
return new SelectCategoryCommand(this);
}
}
public CategoryType SelectedCategory
{
get; set;
}
et la 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;
}
}
Cependant le Paramètre dans la méthode Execute de l'ICommand est toujours null. Je suis stil assez inexpérimenté avec SilverLight, donc je pense que je suis vraiment rater quelque chose d'évident. Quelqu'un peut-il aider? Merci à l'avance!
source d'informationauteur bplus
Vous devez vous connecter pour publier un commentaire.
Après avoir fait quelques recherches, j'ai trouvé qu'il est très simple de passer la réelle SelectionChangedEventArgs ICommand execute paramètre:
Juste mis
PassEventArgsToCommand="True"
Puis dans la méthode Execute faire quelque chose comme:
Vous pourriez essayer d'ajouter un CommandParameter et en passant une liste pour votre relayCommand
Quelque chose de similaire est décrit vers le bas de cette page, mais avec un contrôle datagrid:
http://mvvmlight.codeplex.com/ Le code de la page ressemble à ceci:
Si vous faites cela, votre relayCommand aurait besoin pour faire face avec les paramètres à venir.
Quelque chose comme ceci dans votre ViewModel:
...