Настройка моего частичного просмотра, не работает xamarin - PullRequest
0 голосов
/ 25 апреля 2020

Теперь я начал работать с Prism Framework для xamarine, но у меня возникла небольшая проблема с установлением соединений между представлениями.

У меня есть эта папка "Views", и внутри нее у меня есть еще одна папка с именем PartialViews. Теперь внутри PartialViews у меня есть contentPage под названием «Header.xaml». Теперь я хотел бы прикрепить этот файл к представлению Index.xaml, которое находится в папке Views. Я хотел бы присоединить «Header.xaml» к другим представлениям, как, например, я хотел бы присоединить его к представлению «Orders.xaml».

Мой файл Header.xaml выглядит следующим образом:

        <?xml version="1.0" encoding="utf-8" ?>
        <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
                     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                     xmlns:prism="http://prismlibrary.com"
                     xmlns:local="clr-namespace:PROJECTX.Views"
                     prism:ViewModelLocator.AutowireViewModel="True"
                     x:Class="PROJECTX.Views.Header">

            <StackLayout>
                <Label Text="Trying partial views" />
            </StackLayout>

        </ContentPage>

В то время как мой Index.xaml выглядит следующим образом:

        <?xml version="1.0" encoding="utf-8" ?>
        <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
        xmlns:combobox="clr-namespace:Syncfusion.XForms.ComboBox;assembly=Syncfusion.SfComboBox.XForms"
        xmlns:ListCollection="clr-namespace:System.Collections.Generic;assembly=mscorlib"
                     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                     xmlns:prism="http://prismlibrary.com"
                     xmlns:local="clr-namespace:PROJECTX.Views"
                     prism:ViewModelLocator.AutowireViewModel="True"
                     x:Class="PROJECTX.Views.Index"
                     x:Name="selfi">


            <ScrollView>
                <local:Header mvvm:ViewModelLocator.AutowirePartialView="{x:Reference selfi}" />

                <combobox:SfComboBox x:Name="comboBox">
                    <combobox:SfComboBox.ComboBoxSource>
                        <ListCollection:List x:TypeArguments="x:String">
                            <x:String>Rendit sipas: Me te kerkuara</x:String>
                            <x:String>Rendit sipas: Te fundit</x:String>
                            <x:String>Rendit sipas: Alfabetit</x:String>
                        </ListCollection:List>
                    </combobox:SfComboBox.ComboBoxSource>
                </combobox:SfComboBox>


            </ScrollView>

        </ContentPage>

Я также зарегистрировал в своем App.xaml.cs маршрутизацию папки PartialViews с моделью представления следующим образом:

        protected override void RegisterTypes(IContainerRegistry containerRegistry)
          {
              containerRegistry.RegisterForNavigation<NavigationPage>();
              containerRegistry.RegisterForNavigation<MainPage, MainPageViewModel>();
              containerRegistry.RegisterForNavigation<Index, IndexViewModel>();
              //containerRegistry.RegisterForNavigation<Header, HeaderViewModel>();
              ViewModelLocationProvider.Register<Header, HeaderViewModel>();
          }

Теперь я получаю несколько ошибок ...

1. The property 'Content' is set more than once. 
2. The attachable property 'AutowirePartialView' was not found in type 'ViewModelLocator'.
3. Property 'Content' does not support values of type 'Header'.

Теперь я знаю, что это может быть вопрос с ладьей ie, но я просто не могу его ответить работать это частичное мнение вещь. Верно ли мое понимание частичных представлений в xamarin? Я должен вызвать частичное представление из представления ... правильно?

Любая помощь, которую я действительно очень ценю.

1 Ответ

0 голосов
/ 26 апреля 2020

Итак, вы должны понимать, что в формах Xamarin у вас может быть только один объект ContentPage для страницы, поэтому вы получаете сообщение об ошибке «Контент задан более одного раза». Тем не менее, вы можете иметь несколько макетов на одной странице Здесь быстрый фрагмент, объясняющий страницы по сравнению с макетами

Так как вы хотите использовать Prism "PartialViews", общий способ ссылаться на них это «шаблон». Таким образом, у вас будет файл HeaderTemplate, которым вы поделились. Но вместо объекта ContentPage вы бы использовали объект ContentView (который имеет тип Layout) и определяли бы содержимое заголовка внутри него. ( Официальные документы )

И затем вы можете добавить его на любую страницу, используя эту строку в вашем XAML, как если бы вы добавили обычный макет:

<templates: HeaderTemplate/>

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