Ćwiczenie — konwertowanie programu obsługi zdarzeń na polecenie
W tym ćwiczeniu wróć do aplikacji "lista filmów", z którą pracowaliśmy w poprzednim ćwiczeniu. Tym razem przekonwertujesz procedurę obsługi zdarzeń akcji przesunięcia Usuń na polecenie.
Pobieranie i uruchamianie aplikacji przykładowej
Uwaga
Jeśli planujesz uruchamiać i debugować aplikacje .NET MAUI na Androidzie z systemu Windows, najlepiej sklonować lub pobrać materiały z ćwiczeniami do krótkiej ścieżki folderu, takiej jak C:\dev\, aby uniknąć plików generowanych podczas kompilacji, które przekraczają maksymalną długość ścieżki.
Ten projekt wyświetla listę filmów. Kliknięcie filmu powoduje przejście do strony szczegółów zawierającej więcej informacji o filmie.
- Sklonuj lub pobierz repozytorium ćwiczenia.
- Przejdź do folderu part6-exercise2 i otwórz rozwiązanie MovieCatalog.sln .
- Skompiluj i uruchom projekt, aby upewnić się, że działa. Po wyświetleniu ekranu powinna zostać wyświetlona lista filmów. Przesuń palcem w lewo na jednym z wymienionych filmów, aby wyświetlić akcję usuwania.
Analizowanie kodu
Otwórz rozwiązanie MovieCatalog i otwórz plik Views\MovieListPage.xaml . Element CollectionView przedstawia element dla każdego filmu w powiązanej Movies kolekcji. Każdy element używa SwipeView z akcją usuwania.
<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>
Po kliknięciu elementu przewijanego, wywoływana jest metoda MenuItem_Clicked, a film zostaje usunięty. Kontekst powiązania elementu przesunięcia to bieżący film, klasa MovieViewModel. Jednak kod usuwania filmu znajduje się na głównym modelu MovieListViewModelwidoków aplikacji . Procedura obsługi zdarzeń uwzględnia to, pobierając kontekst powiązania elementu przesunięcia i przekazując go do metody w ViewModelu DeleteMovie.
private void MenuItem_Clicked(object sender, EventArgs e)
{
SwipeItem swipeItem = (SwipeItem)sender;
ViewModels.MovieViewModel movie = (ViewModels.MovieViewModel)swipeItem.BindingContext;
App.MainViewModel.DeleteMovie(movie);
}
Dodawanie polecenia
Pierwszym krokiem konwertowania programu obsługi zdarzeń na polecenie jest dodanie polecenia do modelu viewmodel. To polecenie akceptuje film i usuwa go z kolekcji.
W oknie Eksplorator rozwiązań otwórz plik ViewModels\MovieListViewModel.cs .
Dodaj następującą właściwość do klasy
MovieListViewModel:public ICommand DeleteMovieCommand { get; private set; }Następnie znajdź
MovieListViewModelkonstruktor i utwórz wystąpienie polecenia:public MovieListViewModel() { Movies = []; DeleteMovieCommand = new Command<MovieViewModel>(DeleteMovie); }Metoda
DeleteMoviejuż istnieje i akceptujeMovieViewModelparametr. Polecenie opakowuje tę metodę i uwidacznia ją na modelu viewmodel.Otwórz plik Views\MoviesListPage.xaml .
Zaktualizuj parametr
SwipeItem, aby powiązaćCommandparametr z parametremDeleteMovieCommand. Przekaż bieżący kontekst powiązania jakoCommandParameter.<SwipeItem Text="Delete" BackgroundColor="Red" Command="{Binding DeleteMovieCommand, Source={x:Static local:App.MainViewModel}}" CommandParameter="{Binding}" />Zwróć uwagę, że
Clickedprogram obsługi zdarzeń został usunięty z programuSwipeItem.Kontekst
Sourcepowiązania jest ustawiony na główny model widoku aplikacji, podobnie jak sama strona. KontekstSwipeItempowiązania pozostaje filmem i jest przekazywany do obiektuCommandParameter.Otwórz plik z kodem dla widoku, Views\MoviesListPage.xaml.cs, i usuń kod
MenuItem_Clicked.Uruchom aplikację i przesuń palcem w lewo na jednym z filmów. Wybierz Usuń z akcji przesunięcia. Film zostanie usunięty z listy.