【问题标题】:Xamarin.forms- pass object while navigation with ShellXamarin.forms- 使用 Shell 导航时传递对象
【发布时间】:2022-07-01 20:41:51
【问题描述】:

我正在使用 shell,我想要所有页面上的选项卡。所以我遵循 shell 导航的标准方式,但问题是我不知道如何将对象与导航一起传递。

await Shell.Current.GoToAsync(page.ToString());

这样做是为了导航

Routing.RegisterRoute("TesProject.Views.DetailView", typeof(DetailView));

这样注册路线

我想将一个完整的对象从我的列表视图传递到详细视图。我该怎么做?

Xamarin.Forms Shell Navigation Hierarchy with parameters

我看到了这个,但我认为这不适用于我的情况,因为我无法像这样传递完整的模型对象。

【问题讨论】:

  • 不是传递一个对象,而是传递一些标识该对象的东西。然后详细信息页面在集合中查找该对象。请参阅文档docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/… 中示例中代码 sn-p 中的 LoadAnimal 方法。那使用一个字符串键。您可以改为在字典中使用任何键(通常使用具有每个对象唯一的 id 字段的数据库数据来完成),或者在列表或数组中使用索引。

标签: shell xamarin xamarin.forms mvvm xamarin.ios


【解决方案1】:

我写了一个小例子供大家参考。

在发送类中,可以传递$"AferPage?param={param}"等参数。

这里是发送代码:

public partial class BeforePage : ContentPage
{
    public BeforePage()
    {
        InitializeComponent();
    }

    private async void Button_Clicked(object sender, EventArgs e)
    {
        string param = myEntry.Text;
        await Shell.Current.GoToAsync($"AferPage?param={param}");//like this
    }
}

这里是接收类代码(实现IQueryAttributable接口):

public partial class AferPage : ContentPage, IQueryAttributable
{
    public string param  {get;set;}
    public void ApplyQueryAttributes(IDictionary<string, string> query)
    {
        param = HttpUtility.UrlDecode(query["param"]);
        receive.Text = param;
    }
    public AferPage()
    {
        InitializeComponent();  
    }
}

【讨论】:

  • 问题解决了吗?
【解决方案2】:

使用 Newtonsoft.Json,您可以:

在列表视图中:

var jsonStr = JsonConvert.SerializeObject([Model]);
await Shell.Current.GoToAsync($"{nameof([DetailsViewPage])}?Param={jsonStr }");

在详情查看页面:

添加查询属性:

[QueryProperty(nameof(Param), nameof(Param))]

再次转换为模型:

var bonusesFilterData = JsonConvert.DeserializeObject<[Model]>(Param);

此视频中显示了一个解决方案:https://www.youtube.com/watch?v=YwnEpiJd0I8

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    相关资源
    最近更新 更多