我有一个可以让人们查看有关特定电影的信息的应用。在我的MainPage(GenreListPage)中,我有一个列表,该列表将数据库中的每部电影排序为一个类型列表。相同类型的电影的类型和片数显示在CollectionView ItemTemplate(GenreModel)中。当用户点击流派时,他们导航到具有另一个CollectionView(FilmListPage)的另一个页面。此CollectionView中装有包含影片标题和等级(FilmModel)的ItemTemplate。
[当前,当用户导航到FilmListPage时,构造函数调用一种查询数据库的方法,以检索在GenreListPage中选择的指定类型的所有电影。
我想更改此设置,因此我在GenreModel中包括了FilmModel类型的列表。当我导航到FilmListPage时,我想将FilmModel列表作为参数传递并在FilmListPage中检索它。但是,根据我的理解,传递导航参数仅意味着传递字符串。这是真的吗?
某些代码;
GenreModel.cs
public class GenreModel{
public string GenreType {get; set;}
public List<FilmModel> AssociatedFilms {get; set;}
}
FilmModel.cs
public class FilmModel {
public string Title {get; set;}
public double Rating {get; set;}
}
GenreListPageViewModel.cs
public class GenreListPageViewModel.cs : ViewModelBase
{
private GenreModel _selectedGenre;
private List<GenreModel> _genres;
public GenreModel SelectedGenre
{
get => _selectedGenre;
set => SetProperty(ref _selectedGenre, value);
}
public List<GenreModel> Genres
{
get => _genres;
set => SetProperty(ref _genres, value);
}
public GenreListPageViewModel(INavigationService navigationService, IDatabaseService databaseService) : base (navigationService)
{
Genres = new ObservableCollection<GenreModel>(databaseService.GetFilms());
}
public async void ItemSelected()
{
var p = new NavigationParameters;
p.Add("Films", SelectedGenre.AssociatedFilms);
p.Add("Genre", SelectedGenre.GenreType);
await NavigationService.NavigateAsync("FilmListPage", p);
}
}
FilmListPageViewModel.cs
public class FilmListPageViewModel.cs : ViewModelBase, INavigationAware
{
IDatabaseService _databaseService;
private string _genre;
private List<FilmModel> _films = new List<FilmModel>();
public string Genre
{
get => _genre;
set => SetProperty(ref _genre, value);
}
public List<FilmModel> Films
{
get => _films;
set => SetProperty(ref _films, value);
}
public GenreListPageViewModel(INavigationService navigationService, IDatabaseService databaseService) : base (navigationService)
{
_databaseService = databaseService;
}
public void OnNavigatedFrom(INavigationParameters parameters)
{
}
public void OnNavigatedTo(INavigationParameters parameters)
{
Genre = parameters.GetValue<string>("Genre")};
//old code that used to get film by selected genre
//Films = databaseService.GetFilmsByGenre(Genre);
Films = new ObservableCollection<FilmModel>(parameters.GetValues<FilmModel>("Films"));
}
}
但是据我了解,传递导航参数仅意味着传递字符串。这是真的吗?
幸运的是,与键关联的值可以是任何值(请查看the code):
public interface INavigationParameters : IEnumerable<KeyValuePair<string, object>>