1

我希望我的页面类继承自以下基类:

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>

4

1 回答 1

0

根据胡安的建议,这是正确的语法:

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

Wherex:TypeArguments="vm:MainVm"定义泛型类型的参数。

于 2021-10-07T10:22:01.363 回答