Setting my partial View, not working xamarin

試著忘記壹切 提交于 2020-05-17 06:21:25

问题


Now I got started with Prism Framework for xamarine, but I'm having a little problem achieving connections across views.

I have this folder "Views" and inside it I have another folder called PartialViews. Now inside PartialViews I have a contentPage called "Header.xaml". Now I would like to atach this file to the Index.xaml view, which is located in the Views folder. I would like to atach the "Header.xaml" to other views also, like for example I would like to atach it to the "Orders.xaml" view.

My Header.xaml file is as follows :

        <?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>

While my Index.xaml is as follows:

        <?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>

I also registred on my App.xaml.cs the routing of the PartialViews folder with the view model like this:

        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>();
          }

Now I get a few errors...

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'.

Now I know this might be a rookie question, but I just can't seem to get it to work this partial views thing. Is my understanding of partial views in xamarin correct? I'm supposed to call the partial view from the view.. correct?

Any help I would really really appreciate.


回答1:


So you have to understand that in Xamarin forms, you can only have one ContentPage object for a page, hence you are getting the error “Content is set more than once”. You can however have multiple Layouts inside a single page Here’s a quick snippet explaining pages versus layouts

Since you’re looking to use the Prism "PartialViews", a common way of referencing them is a "Template". So you’d have a HeaderTemplate file as you have shared. But instead of a ContentPage object, you would use a ContentView object (which is of type Layout) and you would define the content of the header inside that. (Official Docs)

And then you can add it to any page using this line inside your XAML as you would add a regular layout:

<templates: HeaderTemplate/>



来源:https://stackoverflow.com/questions/61426282/setting-my-partial-view-not-working-xamarin

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!