Exercice : Convertir un gestionnaire d’événements en commande
Dans cet exercice, revenez à l’application « liste de films » avec laquelle vous avez travaillé dans l’exercice précédent. Cette fois, vous convertissez le gestionnaire d’événements de l’action Supprimer en commande.
Télécharger et exécuter l’exemple
Remarque
Si vous envisagez d’exécuter et de déboguer vos applications .NET MAUI sur Android à partir de Windows, il est préférable de cloner ou de télécharger le contenu de l’exercice sur un chemin de dossier court, comme C:\dev\, pour que les fichiers générés par la build ne dépassent pas la longueur maximale de chemin.
Ce projet affiche une liste de films. Cliquer sur un film navigue vers une page détaillée incluant plus d’informations sur le film.
- Clonez ou téléchargez le dépôt des exercices.
- Accédez au dossier partie6-exercise2 et ouvrez la solution MovieCatalog.sln .
- Générez et exécutez le projet pour vérifier qu’il fonctionne. Lorsque l’écran s’affiche, vous devez voir une liste de films. Balayez vers la gauche sur l’un des films répertoriés pour afficher l’action de suppression.
Examiner le code
Ouvrez la solution MovieCatalog et ouvrez le fichier Views\MovieListPage.xaml. Le CollectionView présente un élément pour chaque film dans la collection Movies liée. Chaque élément utilise un SwipeView avec une action de suppression :
<CollectionView.ItemTemplate>
<DataTemplate x:DataType="vm:MovieViewModel">
<SwipeView>
<SwipeView.RightItems>
<SwipeItems>
<SwipeItem Text="Delete"
BackgroundColor="Red"
Clicked="MenuItem_Clicked" />
</SwipeItems>
</SwipeView.RightItems>
<VerticalStackLayout Padding="10">
<Label Text="{Binding Title}"
FontSize="16" />
</VerticalStackLayout>
</SwipeView>
</DataTemplate>
</CollectionView.ItemTemplate>
Lorsque l’élément de balayage est cliqué, la MenuItem_Clicked méthode est appelée et le film est supprimé. Le contexte de liaison de l’élément de balayage est le film actuel, la classe MovieViewModel. Mais le code de suppression d’un film se trouve sur le mode d’affichage principal de l’application MovieListViewModel. Le gestionnaire d’événements considère ce fait lorsqu'il obtient le contexte de liaison de l'élément de glissement et l'envoie à la méthode DeleteMovie du viewmodel :
private void MenuItem_Clicked(object sender, EventArgs e)
{
SwipeItem swipeItem = (SwipeItem)sender;
ViewModels.MovieViewModel movie = (ViewModels.MovieViewModel)swipeItem.BindingContext;
App.MainViewModel.DeleteMovie(movie);
}
Ajouter une commande
La première étape de la conversion du gestionnaire d’événements en commande consiste à ajouter la commande au mode d’affichage. Cette commande accepte un film et le supprime de la collection.
Dans la fenêtre Explorateur de solutions, ouvrez le fichier ViewModels\MovieListViewModel.cs.
Ajoutez la propriété suivante à la classe
MovieListViewModel:public ICommand DeleteMovieCommand { get; private set; }Ensuite, recherchez le constructeur
MovieListViewModelet instanciez la commande :public MovieListViewModel() { Movies = []; DeleteMovieCommand = new Command<MovieViewModel>(DeleteMovie); }La méthode
DeleteMovieexiste déjà et accepte un paramètreMovieViewModel. La commande encapsule cette méthode et l’expose sur le mode d’affichage.Ouvrez le fichier Views\MoviesListPage.xaml .
Mettez à jour le
SwipeItemparamètre pour lier leCommandparamètre à l’objetDeleteMovieCommand. Transmettez le contexte de liaison actuel en tant queCommandParameter.<SwipeItem Text="Delete" BackgroundColor="Red" Command="{Binding DeleteMovieCommand, Source={x:Static local:App.MainViewModel}}" CommandParameter="{Binding}" />Notez que le gestionnaire d’événements
Clickeda été supprimé duSwipeItem.La
Sourcedu contexte de liaison est définie sur le mode d’affichage principal de l’application, tout comme la page elle-même. Le contexte de liaison deSwipeItemreste le film et est passé àCommandParameter.Ouvrez le fichier code-behind de l’affichage, Views\MoviesListPage.xaml.cs et supprimer le code
MenuItem_Clicked.Exécutez l’application et balayez vers la gauche sur l’un des films. Sélectionnez Supprimer dans l’action de balayage. Le film est supprimé de la liste.