Контроль доступа в формах Xamarin - PullRequest
0 голосов
/ 23 апреля 2020

Я новичок ie в формах Xamarin.

Я хочу включить ShellSection (вкладку) в моем приложении после завершения указанного этапа c.

В настоящее время я использую класс AppShell для управления элементами навигации (в настоящее время PageOneTab не включен) -

<?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:MyApp="clr-namespace:MyApp"
             x:Class="MyApp.AppShell"
             FlyoutBehavior="Disabled"
             Navigating="Handle_Navigating">
    <ShellItem>

        <ShellSection x:Name="HomeTab" Icon="home">
            <ShellContent>
                <MyApp:HomePage/>
            </ShellContent>
        </ShellSection>

        <ShellSection x:Name="PageOneTab" x:FieldModifier="public"  IsEnabled="False">
            <ShellContent>
                <MyApp:PageOnePage/>
            </ShellContent>
        </ShellSection>

    </ShellItem>
</Shell>

В HomePage ContentPage у меня есть нажатие кнопки -

public HomePage()
{
    InitializeComponent();

}

private async void HomePageButton_Clicked(object sender, EventArgs e)
{
    await Navigation.PushAsync(new HandlingPage());
}

И в моей HandlingPage ContentPage, основанной на результате, я хочу включить ShellSection PageOneTab.

public HandlingPage()
{
    InitializeComponent();

    // do stuff....

    // then set -
    StatusTab.IsEnabled = true;
}

Я думал, добавив x:FieldModifier="public" к элементу управления, к которому я смогу получить доступ он из HandlingPage, однако он недоступен, фактически единственное место, где я могу получить доступ к элементу управления в настоящее время, я считаю, находится в коде AppShell.xaml.cs, выполнив StatusTab.IsEnabled = true;. Я считаю, что это может быть до BindingContext однако не уверен.

1 Ответ

2 голосов
/ 24 апреля 2020

Если вы хотите изменить статус IsEnable одного ShellSection, я предлагаю вам использовать MessageCenter для этого.

Мои ShellItems:

 <ShellItem>
    <ShellSection
        x:Name="itempage"
        Title="Browse"
        Icon="tab_feed.png">
        <ShellContent>
            <local:ItemsPage />
        </ShellContent>
    </ShellSection>
    <ShellSection
        x:Name="aboutpage"
        Title="About"
        Icon="tab_about.png"
        IsEnabled="False">
        <ShellContent>
            <local:AboutPage />
        </ShellContent>
    </ShellSection>
</ShellItem>

И подписаться на сообщение в AppShell.cs:

 public AppShell()
    {
        InitializeComponent();

        MessagingCenter.Subscribe<AppShell>(this, "Hi", (sender) =>
        {
            aboutpage.IsEnabled = true;
        });
    }

Отправка одного сообщения на странице содержимого HandlingPage:

 private void btn1_Clicked(object sender, EventArgs e)
    {
        MessagingCenter.Send<AppShell>(new AppShell(),"Hi");
    }

Это статья о MessageCenter , которую вы можете посмотреть :

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/messaging-center

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...