Xamarin.Forms Shell 将数据传递到弹出项目视图
Xamarin.Forms Shell Passing Data to Flyout Item Views
我想知道如何将项目从主 shell 页面传递到弹出页面。或者,我想知道我是否可以在其弹出页面中简单地使用一个对象(该对象已经存在于主 shell 的范围内)。我猜想在代码隐藏中有一些方法可以做到这一点。
具体来说,我有一个登录页面(不是 shell 的一部分),一旦用户登录,它就会导航到主页面 shell。它将 Jason 网络令牌传递给主要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>
非常感谢任何帮助!
您可以使用 Xamarin.Essentials: Preferences 将数据存储在 Main Shell 和 get/use 它在 '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");
我想知道如何将项目从主 shell 页面传递到弹出页面。或者,我想知道我是否可以在其弹出页面中简单地使用一个对象(该对象已经存在于主 shell 的范围内)。我猜想在代码隐藏中有一些方法可以做到这一点。
具体来说,我有一个登录页面(不是 shell 的一部分),一旦用户登录,它就会导航到主页面 shell。它将 Jason 网络令牌传递给主要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>
非常感谢任何帮助!
您可以使用 Xamarin.Essentials: Preferences 将数据存储在 Main Shell 和 get/use 它在 '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");