发送对象列表作为导航参数

马克·巴顿

我有一个应用程序,可以让人们查看有关特定电影的信息。在我的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"));
    }
}

丹·西格尔

Navigation和Dialog参数实际上都是IEnumerable<KeyValuePair<string, object>>那么这对你的意义是什么?

对于初学者来说,这意味着任何给定的键都可以包含一个或多个实际值。

navigationParameters.Add("message", "Prism is great for Wpf apps");
navigationParameters.Add("message", "Prism is great for Xamarin.Forms apps");
navigationParameters.Add("message", "Prism is great for Uno and WinUI apps");

其次,这意味着您可以传递任何您想要的参数。

var messages = new[] {
    "Prism is great for Wpf apps",
    "Prism is great for Xamarin.Forms apps",
    "Prism is great for Uno and WinUI apps"
};
navigationParameters.Add("message", messages);

如您所知,您可以像这样拉回参数:

var messages = navigationParameters.Get<IEnumerable<string>>("message");

如果您使用添加消息的第一种方式使用此方法,则可能会遇到异常,因为它将达到第一个值,并且看到它不是同一类型。如果您以第二种方式添加它,由于添加了,它仍然可以工作IEnumerable<string>

但是,还有第二种方法可以很好地满足您的需求,并且不管您如何添加值都可以使用。

var messages = navigationParameters.GetValues<string>("message");

GetValues方法返回给定泛型类型的IEnumerable。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Alamofire发送对象作为参数

来自分类Dev

webapi httppost发送参数作为对象

来自分类Dev

在resque中发送对象作为参数

来自分类Dev

发送子对象作为父参数

来自分类Dev

如何发送匿名对象作为方法参数?

来自分类Dev

发送城堡对象作为解析中的参数

来自分类Dev

对象列表作为IN运算符的参数

来自分类Dev

将对象列表作为单个参数传递

来自分类Dev

PyGTK自定义信号发送列表作为参数

来自分类Dev

发送列表作为参数时验证Python参考计数

来自分类Dev

如何在ejs中将对象作为函数参数发送

来自分类Dev

发送对象作为函数的参数时移动语义

来自分类Dev

在http.get中发送嵌套对象作为参数

来自分类Dev

如何在Java中将Date对象作为参数发送

来自分类Dev

将对象作为参数发送到DLL函数

来自分类Dev

在 client.PutAsync 中将对象作为参数发送

来自分类Dev

PHP:发送选项列表作为参数(替代命名参数/参数包)

来自分类Dev

MongoDB Linq查询,包括作为参数的对象列表

来自分类Dev

在Typescript中使用列表和对象作为参数覆盖函数

来自分类Dev

给对象作为测试参数

来自分类Dev

有没有办法将对象作为导航参数传递?

来自分类Dev

jQuery发送事件作为参数

来自分类Dev

淘汰发送ViewModel作为参数

来自分类Dev

发送窗口作为命令参数

来自分类Dev

为什么不能在函数参数列表中使用匿名对象作为参数?C ++

来自分类Dev

如何将对象列表作为函数中的参数传递,然后使用对象的属性C#

来自分类Dev

如何使用RESTEasy客户端将列表作为查询参数发送

来自分类Dev

如何使用ctypes模块通过引用EnumChildWindows将Python列表作为参数发送?

来自分类Dev

将对象作为参数发送到派生的Node.js进程

Related 相关文章

热门标签

归档