现在,我开始使用用于xamarine的Prism Framework,但是在实现跨视图的连接时遇到了一些问题。
我有此文件夹“ Views”,并且在其中有另一个名为PartialViews的文件夹。现在在PartialViews中,我有一个名为“ Header.xaml”的contentPage。现在,我想将此文件访问到位于Views文件夹中的Index.xaml视图。我也想将“ 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">
<ScrollView>
<local:Header mvvm:ViewModelLocator.AutowirePartialView="{x:Reference Header}" />
<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'.
现在我知道这可能是一个菜鸟问题,但我似乎无法使它用于处理部分视图问题。我对xamarin中的部分视图的理解正确吗?我应该从视图中调用局部视图。对吗?
任何帮助,我都会非常感激。
因此,您必须了解,在Xamarin表单中,一个页面只能有一个ContentPage对象,因此会出现错误“内容设置不止一次”。但是,您可以在一个页面中包含多个布局这是一个简短的片段,说明页面与布局https://youtu.be/-2TZpsUJEjk?t=480
由于您要使用PartialViews,因此引用它们的常用方法是使用模板。因此,您将拥有一个共享的HeaderTemplate文件。但是,您可以使用ContentView对象(它是layout类型)来代替ContentPage对象,并在其中定义内容。 (https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/contentview)