Alıştırma - Olay işleyicisini komuta dönüştürme
Bu alıştırmada, önceki alıştırmada birlikte çalıştığınız "film listesi" uygulamasına geri dönün. Bu kez Sil menüsünün olay işleyicisini bir komuta dönüştüreceksiniz.
Örneği indirme ve çalıştırma
Not
Windows'tan Android'de .NET MAUI uygulamalarınızı çalıştırmayı ve hatalarını ayıklamayı planlıyorsanız, derleme tarafından oluşturulan dosyaların yol uzunluğunun üst sınırını aşmasını önlemek için en iyisi alıştırma içeriğini kopyalayıp C:\dev\ gibi kısa bir klasör yoluna indirmektir.
Bu alıştırma modülünü başlatmak için Film Listesi Örneği projesini indirin. Bu projede film listesi görüntülenir. Bir filme tıklanması, film hakkında daha fazla bilgi içeren bir ayrıntı sayfasına gider.
- Film Listesi Örneği projesini indirip geçici bir klasöre ayıklayın.
- part6-exercise2 klasörüne gidin ve MovieCatalog.sln çözümünü açın.
- Çalıştığından emin olmak için projeyi derleyin ve çalıştırın. Görüntülenen ekranda bir film listesi görürsünüz. Listelenen filmlerden birine sağ tıklarsanız uygulama bir ayrıntı sayfasına gider.
Kodu inceleme
MovieCatalog çözümünü açın ve Views\MovieListPage.xaml dosyasını açın. , ListView
ilişkili Movies
koleksiyondaki her film için bir öğe sunar. Her öğe, bir filmi silmek için bir bağlam menüsü tanımlar:
<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>
Menü öğesine tıklandığında, MenuItem_Clicked
öğesi çağrılır ve film kaldırılır. Menü öğesinin bağlama bağlamı, geçerli film olan sınıfıdır MovieViewModel
. Ancak bir filmi kaldırma kodu uygulamanın ana görünüm modelindedir MovieListViewModel
. Olay işleyicisi, menü öğesinin bağlama bağlamını aldığından ve viewmodelin DeleteMovie
yöntemine gönderdiğinden bunu dikkate alır:
private void MenuItem_Clicked(object sender, EventArgs e)
{
MenuItem menuItem = (MenuItem)sender;
ViewModels.MovieViewModel movie = (ViewModels.MovieViewModel)menuItem.BindingContext;
App.MainViewModel.DeleteMovie(movie);
}
Komut ekleme
Olay işleyicisini komuta dönüştürmenin ilk adımı, komutu görünüm modeline eklemektir. Bu komut bir filmi kabul eder ve koleksiyondan kaldırır.
Çözüm Gezgini penceresinde ViewModels\MovieListViewModel.cs dosyasını açın.
MovieListViewModel
sınıfına aşağıdaki özelliği ekleyin:public ICommand DeleteMovieCommand { get; private set; }
Ardından oluşturucuyu
MovieListViewModel
bulun ve komutun örneğini başlatın:public MovieListViewModel() { Movies = []; DeleteMovieCommand = new Command<MovieViewModel>(DeleteMovie); }
DeleteMovie
yöntemi zaten var ve birMovieViewModel
parametre kabul ediyor. komutu bu yöntemi sarmalar ve görünüm modelinde kullanıma sunar.ViewModels\MoviesListPage.xaml dosyasını açın.
parametresini
MenuItem
öğesine bağacakCommand
şekilde güncelleştirinDeleteMovieCommand
. Geçerli bağlama bağlamını olarak geçirinCommandParameter
.<MenuItem Text="Delete" IsDestructive="True" Command="{Binding DeleteMovieCommand, Source={x:Static local:App.MainViewModel}}" CommandParameter="{Binding}" />
Olay işleyicisinin
Clicked
öğesinden kaldırıldığınaMenuItem
dikkat edin.Source
Bağlama bağlamı, sayfanın kendisi gibi uygulamanın ana görünüm modeline ayarlanır. bağlama bağlamıMenuItem
film olarak kalır ve bu, öğesineCommandParameter
geçirilir.Views\MoviesListPage.xaml.cs görünümü için arka planda kod dosyasını açın ve kodu kaldırın
MenuItem_Clicked
.Uygulamayı çalıştırın ve filmlerden birine sağ tıklayın veya uzun basın, bağlam menüsünden Sil'i seçin. Film listeden silinir.