Latihan - Mengonversi penanganan aktivitas menjadi perintah
Dalam latihan ini, tukar kembali ke aplikasi "daftar film" yang anda kerjakan di latihan sebelumnya. Kali ini, Anda akan mengonversi penanganan aktivitas menu Hapus menjadi perintah.
Unduh dan jalankan sampel
Catatan
Jika Anda berencana untuk menjalankan dan men-debug aplikasi .NET MAUI Anda di Android dari Windows, yang terbaik adalah mengkloning atau mengunduh konten latihan ke jalur folder singkat, seperti C:\dev\, untuk menghindari file yang dihasilkan build melebihi panjang jalur maksimum.
Untuk memulai modul latihan ini, unduh proyek Sampel Daftar Film. Proyek ini menampilkan daftar film. Mengklik film menavigasi ke halaman detail dengan informasi selengkapnya tentang film.
- Unduh dan ekstrak proyek Sampel Daftar Film ke folder sementara.
- Navigasikan ke folder part6-exercise2 dan buka solusi MovieCatalog.sln .
- Buat dan jalankan proyek untuk memastikan proyek berfungsi. Pada layar yang ditampilkan, Anda akan melihat daftar film. Klik kanan pada salah satu film yang tercantum dan aplikasi menavigasi ke halaman detail.
Memeriksa kode
Buka solusi MovieCatalog dan buka file Views\MovieListPage.xaml. menyajikan ListView
item untuk setiap film dalam koleksi terikat Movies
. Setiap item menentukan menu konteks untuk menghapus film:
<ListView.ItemTemplate>
<DataTemplate>
<TextCell Text="{Binding Title}" x:DataType="vm:MovieViewModel">
<TextCell.ContextActions>
<MenuItem Text="Delete" IsDestructive="True" Clicked="MenuItem_Clicked" />
</TextCell.ContextActions>
</TextCell>
</DataTemplate>
</ListView.ItemTemplate>
Ketika item menu diklik, MenuItem_Clicked
dipanggil dan film dihapus. Konteks pengikatan item menu adalah film saat ini, MovieViewModel
kelas . Tetapi kode untuk menghapus film ada di viewmodel MovieListViewModel
utama aplikasi . Penanganan aktivitas mempertimbangkan ini karena mendapatkan konteks pengikatan item menu dan mengirimkannya ke metode viewmodel DeleteMovie
:
private void MenuItem_Clicked(object sender, EventArgs e)
{
MenuItem menuItem = (MenuItem)sender;
ViewModels.MovieViewModel movie = (ViewModels.MovieViewModel)menuItem.BindingContext;
App.MainViewModel.DeleteMovie(movie);
}
Menambahkan perintah
Langkah pertama dalam mengonversi penanganan aktivitas menjadi perintah adalah menambahkan perintah ke viewmodel. Perintah ini menerima film dan menghapusnya dari koleksi.
Di jendela Penjelajah Solusi, buka file ViewModels\MovieListViewModel.cs.
Tambahkan properti berikut ke kelas
MovieListViewModel
:public ICommand DeleteMovieCommand { get; private set; }
Selanjutnya, temukan
MovieListViewModel
konstruktor dan buat instans perintah:public MovieListViewModel() { Movies = []; DeleteMovieCommand = new Command<MovieViewModel>(DeleteMovie); }
Metode
DeleteMovie
sudah ada dan menerimaMovieViewModel
parameter. Perintah membungkus metode itu dan mengeksposnya pada viewmodel.Buka file ViewModels\MoviesListPage.xaml.
MenuItem
Perbarui untuk mengikatCommand
parameter keDeleteMovieCommand
. Berikan konteks pengikatan saat ini sebagaiCommandParameter
.<MenuItem Text="Delete" IsDestructive="True" Command="{Binding DeleteMovieCommand, Source={x:Static local:App.MainViewModel}}" CommandParameter="{Binding}" />
Perhatikan bahwa penanganan
Clicked
aktivitas dihapus dariMenuItem
.Konteks
Source
pengikatan diatur ke viewmodel utama aplikasi, sama seperti halaman itu sendiri. Konteks pengikatan dariMenuItem
sisa film, dan yang diteruskan keCommandParameter
.Buka file code-behind untuk tampilan, Views\MoviesListPage.xaml.cs, dan hapus
MenuItem_Clicked
kode.Jalankan aplikasi dan klik kanan atau tekan lama salah satu film, pilih Hapus dari menu konteks. Film dihapus dari daftar.