Почему структура главной страницы Prism отличается от Xamarin.Forms? - PullRequest
0 голосов
/ 14 февраля 2020

Я разработал одно приложение за месяцы go с Призмой. Это отличный инструмент для создания идеальной структуры моего приложения. Однако сегодня я попытался поднять это приложение и исправить некоторые вещи, которые ожидали в течение длительного времени. Я использовал страницу Master Detail в своем приложении, и сегодня я неожиданно обнаружил, что на самом деле структура того, как я разработал эту страницу Master Detail с использованием Prism, отчасти мне не известна.

Итак, вот она.

В основном мой MasterDetailPage выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:b="clr-namespace:Prism.Behaviors;assembly=Prism.Forms"
             mc:Ignorable="d"
             x:Class="JapaneseLearnPrism.Views.MenuPage">
    <MasterDetailPage.Master>
        <NavigationPage Title="Menu" Icon="ic_hamburger.png">
            <x:Arguments>
                <ContentPage Title="{Binding Title}">
                    <ListView ItemsSource="{Binding MenuItems}"
                              SelectedItem="{Binding SelectedMenuItem, Mode=TwoWay}"
                              SeparatorColor="LightGray"
                              RowHeight="60"
                              SeparatorVisibility="Default"
                              BackgroundColor="#e8e8e8">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <ViewCell>
                                    <StackLayout VerticalOptions="FillAndExpand"
                                                 Orientation="Horizontal"
                                                 Padding="20,10,0,10"
                                                 Spacing="20">
                                        <Label Text="{Binding PageIconText}" FontFamily="{StaticResource FontAwesomeSolid}" FontSize="Medium" VerticalOptions="Center" />
                                        <Label Text="{Binding Title}" FontSize="Medium" VerticalOptions="Center" TextColor="Black" />
                                    </StackLayout>
                                </ViewCell>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                        <ListView.Behaviors>
                            <b:EventToCommandBehavior EventName="ItemTapped" Command="{Binding NavigateCommand}" />
                        </ListView.Behaviors>
                    </ListView>
                </ContentPage>
            </x:Arguments>
        </NavigationPage>
    </MasterDetailPage.Master>
</MasterDetailPage>

И путь навигации такой в ​​файле App.xaml.cs.

await NavigationService.NavigateAsync(nameof(MenuPage) + "/" + nameof(NavigationPage) + "/" + nameof(Views.MainPage));

Но если я посмотрю на множество В образцах Xamarin.Forms MasterDetailPage фактически отличается. Они будут делать, как показано ниже:

<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
                  xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                  xmlns:local="clr-namespace:MasterDetailPageNavigation;assembly=MasterDetailPageNavigation"
                  x:Class="MasterDetailPageNavigation.MainPage">
    <MasterDetailPage.Master>
        <local:MasterPage x:Name="masterPage" />
    </MasterDetailPage.Master>
    <MasterDetailPage.Detail>
        <NavigationPage>
            <x:Arguments>
                <local:ContactsPage />
            </x:Arguments>
        </NavigationPage>
    </MasterDetailPage.Detail>
</MasterDetailPage>

И это с официального сайта Microsoft. Мастер-страница, описанная выше, на самом деле является всего лишь одной страницей ContentPage, однако страница сведений должна быть NavigationPage, которую я могу понять, поскольку она имеет смысл.

Однако в моем приложении Prism MasterPage также должен быть NavigaionPage, почему это? Кто-нибудь может помочь в этом?

Спасибо.

1 Ответ

1 голос
/ 14 февраля 2020

Вы можете взглянуть на этот удивительный блог о Как создать меню навигации по главной странице в Xamarin Forms с помощью Prism . Если вы прокрутите вниз до нижней части поста, вы увидите описание того, почему он работает таким образом. Цитата:

Примечание. Навигация в Prism основана на этом формате URL, где мы можем определить на какие страницы мы хотим go, и это может быть что-то вроде этого: ViewA / ViewB / ViewC / ViewD


... и если вы помните, мы внутри страницы MasterDetail, так что переход от MasterDetail приведет к тому, что эти страницы будут go детализировать его часть ... и это здорово для нас, у нас есть меню сбоку от главной страницы, и выбор пунктов меню откроет страницы как страницы деталей. .

Способ, которым разработана Prism Navigation, имеет смысл, когда DetaiPage входит в MasterDetail, поэтому в основном он сохраняет Prism Logi c выполнения Навигации.


Цитирование основ Навигация по Prism

Навигация в приложении Prism концептуально отличается от стандартной навигации в Xamarin.Forms. В то время как для навигации Xamarin.Forms используется экземпляр класса Page, Prism удаляет все зависимости от типов страниц для достижения слабосвязанной навигации из ViewModel. В Prism концепция перехода к представлению или навигации по модели представления не существует. Вместо этого вы просто переходите к опыту или уникальному идентификатору, который представляет собой целевое представление, к которому вы будете обращаться sh, чтобы перейти в вашем приложении.

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