让MAUI页面继承表单自定义基类
Posted
技术标签:
【中文标题】让MAUI页面继承表单自定义基类【英文标题】:Let MAUI page inherit form custom base class 【发布时间】:2021-11-26 18:54:46 【问题描述】:我希望我的页面类继承自以下基类:
public abstract class BaseContentPage<T> : ContentPage where T : BaseViewModel
public BaseContentPage(T viewModel, string pageTitle)
BindingContext = ViewModel = viewModel;
Title = pageTitle;
protected T ViewModel get;
public partial class MainPage : BaseContentPage<MainVm>
public MainPage(MainVm vm) : base(vm, "Hello")
InitializeComponent();
页面类是部分的,我想,MAUI 会生成一些具有不同父类的隐藏代码。然后我收到以下错误:
CS0263:“类型”的部分声明不得指定不同的基类
有没有办法指定生成的部分类的父类?
编辑
首先,我保留了原始标记,它会生成不同的基类并导致 CS0263 错误: <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:m="clr-namespace:MyProject.Models"
xmlns:vm="clr-namespace:MyProject.ViewModels"
x:Class="MyProject.Pages.MainPage"
xmlns:local="clr-namespace:MyProject">
<BaseContentPage.Content>
<StackLayout>
<Label Text="Welcome to MyProject!"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand" />
</StackLayout>
</BaseContentPage.Content>
</ContentPage>
然后我尝试将我的通用基类与 @JuanSturla 提到的 TypeArguments 一起使用,但这会导致未知类错误:
<BaseContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:m="clr-namespace:MyProject.Models"
xmlns:vm="clr-namespace:MyProject.ViewModels"
x:Class="MyProject.Pages.MainPage"
x:TypeArguments="vm:MainVm"
xmlns:local="clr-namespace:MyProject">
<BaseContentPage.Content>
<StackLayout>
<Label Text="Welcome to MyProject!"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand" />
</StackLayout>
</BaseContentPage.Content>
</BaseContentPage>
【问题讨论】:
您是否还更改了 XAML 上的基类?他们应该匹配 @JuanSturla 如何为BaseContentPage
标记指定通用值?
我不知道。 MVVMCross 做了类似的事情。在代码隐藏中它类似于 MyPage: MvxContentPage<ViewModel>
而在 XAML 中它是 <views:MvxContentPage xmlns:viewModels="clr-namespace:MyMvvmCrossApp1.Core.ViewModels.Contacts;assembly=MyMvvmCrossApp1.Core" x:TypeArguments="viewModels:ContactsViewModel">
您可以在下面的链接中提出您的 MAUI 问题以获得更多支持。 github.com/dotnet/maui/issues
如果在 XAML 中将 BaseContentPage
替换为 local:BaseContentPage
?
【参考方案1】:
根据胡安的建议,这里是正确的语法:
<local:BaseContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:m="clr-namespace:MyProject.Models"
xmlns:vm="clr-namespace:MyProject.ViewModels"
x:Class="MyProject.Pages.MainPage"
x:TypeArguments="vm:MainVm"
xmlns:local="clr-namespace:MyProject">
<ContentPage.Content>
<StackLayout>
<Label Text="Welcome to MyProject!"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand" />
</StackLayout>
</ContentPage.Content>
</local:BaseContentPage>
x:TypeArguments="vm:MainVm"
定义泛型类型的参数。
【讨论】:
以上是关于让MAUI页面继承表单自定义基类的主要内容,如果未能解决你的问题,请参考以下文章