Cvičení – správa výběru pomocí modelu zobrazení
V našem cvičení stručně ponecháme příklad aplikace pro lidské zdroje. Místo toho pracujeme s aplikací, která uvádí filmy. Aplikace už má několik stránek a modelů zobrazení, které mají některé základní vazby. Dvě stránky jsou stránka seznamu a stránka podrobností. Logiku výběru upravíme tak, aby ListView
stránka podrobností používala stejnou vlastnost viewmodel.
Tento modul používá sadu .NET 9.0 SDK. Spuštěním následujícího příkazu v upřednostňovaném příkazovém terminálu se ujistěte, že máte nainstalované rozhraní .NET 9.0:
dotnet --list-sdks
Zobrazí se výstup podobný následujícímu příkladu:
8.0.100 [C:\Program Files\dotnet\sdk]
9.0.100 [C:\Program Files\dotnet\sdk]
Ujistěte se, že je uvedená verze, na 9
které začíná. Pokud žádný není uvedený nebo příkaz nebyl nalezen, nainstalujte nejnovější sadu .NET 9.0 SDK.
Otevření úvodního řešení
- Naklonujte nebo stáhněte úložiště cvičení.
- Přejděte do složky part4-exercise1 a otevřete řešení MovieCatalog.sln .
- Sestavte a spusťte projekt, abyste měli jistotu, že funguje. Měl by se zobrazit seznam filmů zobrazených na obrazovce. Vyberte jeden z filmů v seznamu a aplikace přejde na stránku podrobností.
Kontrola kódu
Než se podíváme, jak jsou modely zobrazení a zobrazení strukturované, udělejte několik minut. Pokud znáte jazyk XAML (Extensible Application Markup Language) a datovou vazbu, měla by vypadat dobře, ale struktura používá model Model-View-ViewModel (MVVM).
MovieListViewModel
Jako celkový model zobrazení aplikace a jako model viewmodelu pro model MoviesListPage
zobrazení existuje dvojí povinnost . Tento model zobrazení obsahuje seznam filmů načtených z modelu, což je soubor JSON zahrnutý v projektu. Druhý model viewmodel je MovieViewModel
a představuje jeden film. Slouží také dvojím povinnostem: poskytují údaje pro řádky na stránce seznamu a jako BindingContext
údaje pro MovieDetailPage
stránku seznamu .
Přidání podpory výběru
První MoviesListPage
stránka se zobrazí při spuštění aplikace. Na ListView
stránce je vázána na kolekci MovieViewModel
instancí poskytovaných celkovým modelem zobrazení, MovieListViewModel
. Když vyberete jeden z filmů v zobrazení, ItemTapped
událost přejde na MovieDetailPage
položku , předání BindingContext
položky, což je film, konstruktoru zobrazení. Nastaví MovieDetailPage
model zobrazení, který byl předán jako BindingContext
stránka.
Místo toho aplikaci aktualizujeme tak, aby MovieDetailPage
si přečetla vybraný film z celkového modelu zobrazení aplikace.
V okně Průzkumník řešení otevřete soubor ViewModels\MovieListViewModel.cs.
Do třídy přidejte následující kód
MovieListViewModel
:private MovieViewModel _selectedMovie; public MovieViewModel SelectedMovie { get => _selectedMovie; set => SetProperty(ref _selectedMovie, value); }
Dále otevřete soubor Views\MoviesListPage.xaml .
ListView
Vyhledejte element a přidejteSelectedItem
atribut:<ListView ItemsSource="{Binding Movies}" SelectedItem="{Binding SelectedMovie, Mode=OneWayToSource}" Margin ... >
Tento atribut vytvoří vazbu vybrané položky seznamu na novou vlastnost v modelu viewmodel.
Otevřete soubor kódu pro zobrazení Views\MoviesListPage.xaml.cs.
ListView_ItemTapped
Nahraďte kód obslužné rutiny události následujícím kódem:private async void ListView_ItemTapped(object sender, ItemTappedEventArgs e) { await Navigation.PushAsync(new Views.MovieDetailPage()); }
Film
MovieDetailPage
už v konstruktoru nepřijímá, ale nový konstruktor přečte hlavní model zobrazení aplikace.Otevřete soubor Views\MovieDetailPage.xaml.cs a změňte konstruktor na následující kód:
public MovieDetailPage() { BindingContext = App.MainViewModel.SelectedMovie; InitializeComponent(); }
Tento kód nastaví kontext vazby zobrazení na vybraný film.
Spusťte aplikaci a ověřte, že kód funguje podle očekávání.