Xamarin.Forms Shell 将数据传递到弹出项视图

Posted

技术标签:

【中文标题】Xamarin.Forms Shell 将数据传递到弹出项视图【英文标题】:Xamarin.Forms Shell Passing Data to Flyout Item Views 【发布时间】:2020-08-21 15:45:51 【问题描述】:

我想知道如何将项目从主 shell 页面传递到弹出页面。或者,或者,我想知道我是否可以在其弹出页面中简单地使用一个对象(它已经存在于主 shell 的范围内)。我猜在代码隐藏中有一些方法可以做到这一点。

具体来说,我有一个登录页面(它不是 shell 的一部分),一旦用户登录,它就会导航到主 shell。它将 Jason Web 令牌传递给主 shell。所以我在主shell中有我需要的东西,我只是不知道如何在弹出页面中使用它!

这里有一些代码来演示:

我有一个登录页面,其中包含一个接受用户名并将其传递给 shell 的函数:

    async void SignInProcedure(System.Object sender, System.EventArgs e)
    
        string name = nameEntry.Text;

        if (name == "sally" || name == "Sally")
            Application.Current.MainPage = new FlyoutMainShell(name);
        else
        
            await DisplayAlert("Login", "Login Failed", "Ok");
        
    

当然,我在 shell 的构造函数中有字符串:

using System;
using System.Collections.Generic;
using System.Windows.Input;
using Xamarin.Forms;

namespace ShellTest

    public partial class FlyoutMainShell : Shell
    

        public FlyoutMainShell(string name)
        
            InitializeComponent();
        
    

现在我不确定如何在弹出项“page1”和“page2”中使用该字符串“name”,即在页面上简单地显示该名称。

<?xml version="1.0" encoding="UTF-8"?>
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
       xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
       x:Class="ShellTest.FlyoutMainShell"
       xmlns:pages="clr-namespace:ShellTest">
    <Shell.FlyoutHeaderTemplate>
        <DataTemplate>
            <Grid BackgroundColor="Gray" HeightRequest="200">
                <Label Text="Here's the header!"
                       TextColor="White"
                       FontAttributes="Bold"
                       HorizontalOptions="Center"
                       VerticalOptions="Center" />
            </Grid>
        </DataTemplate>
    </Shell.FlyoutHeaderTemplate>
    <FlyoutItem x:Name="page1" Title="Go to Page 1">
        <ShellContent ContentTemplate="DataTemplate pages:Page1"/>
    </FlyoutItem>
    <FlyoutItem x:Name="page2" Title="Go to Page 2">
        <ShellContent ContentTemplate="DataTemplate pages:Page2" />
    </FlyoutItem>
</Shell>

非常感谢任何帮助!

【问题讨论】:

我的解决方案对您有用吗?如果是,请您接受(点击此答案左上角的☑️),以便我们可以帮助更多有相同问题的人:)。 是的,这行得通! 【参考方案1】:

您可以使用Xamarin.Essentials: Preferences 将数据存储在 Main Shell 中,并在 'page1' 和 'page2' 中获取/使用它:

在 Main Shell 中,存储数据:

public FlyoutMainShell(string name)

    InitializeComponent();

    Preferences.Set("uesr_name", name);


在其他页面,获取值:

public Page1()

    InitializeComponent();

    var myValue = Preferences.Get("uesr_name", "default_value");


并且您可以在用户注销时删除该值:

Preferences.Remove("uesr_name");

【讨论】:

以上是关于Xamarin.Forms Shell 将数据传递到弹出项视图的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Xamarin Forms Shell 集成到 MvvmCross 设置中

如何使用 DependencyService 和接口委托将 xamarin.android 特定功能的方法传递给 xamarin.forms?

在 Xamarin.Forms Shell 中隐藏 tabbedPage 的标题

使用后台代码触发时,Xamarin.forms 将变量传递给点击手势

如何正确地将字符串 id 传递给 Xamarin.Forms 中的 API 控制器

Xamarin.Forms:处理导航工具栏按钮(Shell)