如何在Xamarin表单shell上更改选项卡项内容?



我需要根据用户登录的条件或仅仅是访客更改我的选项卡的内容之一这是我的shell

<?xml version="1.0" encoding="utf-8" ?>
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:pages="clr-namespace:E_commerce_App.Views.Pages"
xmlns:views="clr-namespace:E_commerce_App.Views" x:DataType="views:TabContainer"
x:Class="E_commerce_App.Views.TabContainer"
TabBarBackgroundColor="#F7F7F7" BackgroundColor="red"
TabBarTitleColor="red" TabBarUnselectedColor="Black"
>
<TabBar>
<Tab Title="Categories" Icon="menu.png">
<ShellContent>
<pages:Categories />
</ShellContent>
</Tab>
<Tab Title="Cart" Icon="cart.png">
<ShellContent >
<pages:Cart />
</ShellContent>
</Tab>
<Tab Title="Profile" Icon="user.png">
<ShellContent
ContentTemplate="{DataTemplate pages:Profile}" />
</Tab>
<Tab Title="Profile" Icon="user.png" x:Name="AccountDetailsPage" IsVisible="False" IsEnabled="True">
<ShellContent Route="AccountDetails"
ContentTemplate="{DataTemplate views:AccountDetails}">
</ShellContent>
</Tab>

</TabBar>

,我想改变配置文件选项卡帐户的详细信息,如果我登录,我试图改变app.current,但它绘制到屏幕上他们

我可以建议一个方法。使用动态资源。在您的xaml文件中,您可以像指定StaticResource一样指定资源,但是使用DynamicResource代替。然后在后面的代码中,你可以修改资源字典,视图应该更新。

<Shell.Resources>
<ResourceDictionary>
<x:String x:Key="TabVisibilty">False</x:String>
</ResourceDictionary>
</Shell.Resources>
<Tab IsVisible="{DynamicResource TabVisibilty}">
<ShellContent ContentTemplate="{DataTemplate pages:AccountDetailsPage}" />
</Tab>

然后你可以在后面的代码中这样修改

Resources["TabVisibilty"] = true;

有很多方法可以做到这一点。

1。您可以先保存您的用户信息,并在AccountDetails页面出现时访问该信息。

例如,可以使用Xamarin。要点:安全存储存储用户信息。

在安全存储中保存给定密钥的值:

using Xamarin.Essentials; 
try
{
await SecureStorage.SetAsync("usename", "user1");
}
catch (Exception ex)
{
// Possible that device doesn't support secure storage on device.
}

一旦AccountDetails出现,从安全存储中检索一个值:

protected override void OnAppearing()
{
base.OnAppearing();
try
{
var username =  SecureStorage.GetAsync("usename");
// display your code here
}
catch (Exception ex)
{
// Possible that device doesn't support secure storage on device.
}
}

2。在你的应用程序中创建一个全局变量,这样你就可以在你的应用程序中访问这个变量。

例如:

创建MyVariables类为你的模型添加静态变量(例如MyViewModel):

public  class MyVariables
{
public static MyViewModel myViewModel { get; set; } = new MyViewModel { Name = "test1" };
}

MyViewModel.cs

public class MyViewModel
{
public string Name { get; set; }
}

你可以在你的应用中修改或访问你的变量:

// modify the variable
MyVariables.myViewModel.Name = "User01";
// access the variable
Debug.WriteLine("the user's name is: " + MyVariables.myViewModel.Name);

相关内容

  • 没有找到相关文章

最新更新