Latihan - Mengonversi penanganan aktivitas menjadi perintah

Selesai

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.

  1. Unduh dan ekstrak proyek Sampel Daftar Film ke folder sementara.
  2. Navigasikan ke folder part6-exercise2 dan buka solusi MovieCatalog.sln .
  3. 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 MovieListViewModelutama 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.

  1. Di jendela Penjelajah Solusi, buka file ViewModels\MovieListViewModel.cs.

  2. Tambahkan properti berikut ke kelas MovieListViewModel:

    public ICommand DeleteMovieCommand { get; private set; }
    
  3. Selanjutnya, temukan MovieListViewModel konstruktor dan buat instans perintah:

    public MovieListViewModel()
    {
        Movies = [];
        DeleteMovieCommand = new Command<MovieViewModel>(DeleteMovie);
    }
    

    Metode DeleteMovie sudah ada dan menerima MovieViewModel parameter. Perintah membungkus metode itu dan mengeksposnya pada viewmodel.

  4. Buka file ViewModels\MoviesListPage.xaml.

  5. MenuItem Perbarui untuk mengikat Command parameter ke DeleteMovieCommand. Berikan konteks pengikatan saat ini sebagai CommandParameter.

    <MenuItem Text="Delete"
              IsDestructive="True"
              Command="{Binding DeleteMovieCommand, Source={x:Static local:App.MainViewModel}}"
              CommandParameter="{Binding}" />
    

    Perhatikan bahwa penanganan Clicked aktivitas dihapus dari MenuItem.

    Konteks Source pengikatan diatur ke viewmodel utama aplikasi, sama seperti halaman itu sendiri. Konteks pengikatan dari MenuItem sisa film, dan yang diteruskan ke CommandParameter.

  6. Buka file code-behind untuk tampilan, Views\MoviesListPage.xaml.cs, dan hapus MenuItem_Clicked kode.

  7. Jalankan aplikasi dan klik kanan atau tekan lama salah satu film, pilih Hapus dari menu konteks. Film dihapus dari daftar.