Вложенные представления вкладок не привязаны к отдельной ViewModel - PullRequest
0 голосов
/ 16 мая 2019

я хочу привязать модель представления к вложенным представлениям вкладок в платформе xamarin prism

я создал 4 главных страницы (A, B, C, D) в качестве главных вкладок, а внутри первой вкладки (A) я создал еще две вкладки (A1, A2). Но данные для вложенных вкладок не являются обязательными. что взгляды (А1, А2) не бьют

MenuPage.xml

<?xml version="1.0" encoding="utf-8" ?>
<TabbedPage  xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MyApp.Views.MenuPage"
             xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
             xmlns:b="clr-namespace:Prism.Behaviors;assembly=Prism.Forms"

             prism:ViewModelLocator.AutowireViewModel="True" 
              xmlns:android="clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core"
             xmlns:views="clr-namespace:MyApp.Views"

                BarBackgroundColor="White"
             android:TabbedPage.ToolbarPlacement="Bottom"
             NavigationPage.HasNavigationBar="True">

    <TabbedPage.Children>
        <views:A Title="A" Icon="abc.png" />
        <views:B Title="B" Icon="abc.png" />
        <views:C Title="C" Icon="abc.png" />
        <views:D Title="D" Icon="abc.png"/>
    </TabbedPage.Children>
</TabbedPage>

и моя страница А похожа на

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            xmlns:views="clr-namespace:MyApp.Views"
             x:Class="MyApp.Views.A">
    <!--Pages can be added as references or inline-->
    <TabbedPage.Children>
    <views:A1 Title="A1" />
    <views:A2 Title="A2" />

        </TabbedPage.Children>
</TabbedPage>

и у меня есть отдельная модель для А1 и А2.

так что, если я напрямую свяжу A1 с главной страницей навигации, он будет работать правильно и отобразит данные. Но если я сделаю то же, что и выше, viewmodel для A1 не попадает в конструктор и ничего не отображается, кроме статических данных. Я новичок на странице с вкладками Навигация. Любая помощь приветствуется. Эту точку зрения я пытаюсь достичь enter image description here

1 Ответ

1 голос
/ 17 мая 2019

Я считаю, что мы должны добавить AutowireViewModel в XAML страницы, чтобы загрузить желаемую модель представления:

xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
prism:ViewModelLocator.AutowireViewModel="True"

Как правило, мы используем containerRegistry.RegisterForNavigation<>();, чтобы привязать модель пользовательского вида к определенному виду. Но вы поместили страницу с вкладками в корневую страницу с вкладками. Это привело к тому, что вложенное представление потеряло отображение на соответствующую модель представления. После добавления AutowireViewModel эта проблема исправлена. Мы все еще можем использовать RegisterForNavigation для привязки вашей пользовательской модели представления к вашему специальному представлению вместо автоматической беседы об именах.

Вот мой пример для простой вложенной страницы с вкладками: https://github.com/landl0526/PrismTabDemo. Обратитесь к ней за более подробным кодом.

Более того, это работает только на платформе Android, так как iOS имеет только выровненную нижнюю панель вкладок.

...