gpt4 book ai didi

xaml - 带有类型参数的页面

转载 作者:行者123 更新时间:2023-12-02 01:51:13 25 4
gpt4 key购买 nike

我想使用 UWP 的新功能 -> x:Bind。为此,我的所有页面都需要具有 ViewModel 属性(如教程中所述)。为了避免代码重复,我建立了基类如下:

public abstract class BasePage<TBaseVM> : Page, where TBaseVM : BaseVM
{
public TBaseVM VM { get; private set; }

protected BasePage()
{
DataContextChanged += (s, e) => VM = e.NewValue as TBaseVM;
}
}

正如您所看到的,这个 BasePage 类包含名为“VM”的属性,并且属性的类型为 BaseVM。因此,我不需要在每个派生类上定义 VM 属性。

然后我创建了在 xaml 中定义的派生页面“MainPage”,如下所示:

<pages:BasePage
x:Class="Realarm.View.Pages.MainPage"
x:TypeArguments="viewModel:MainVM">

通过这样做,即使 Resharper 的 Intellisense 也可以为我提供 MainPage.xaml 中“MainVM”的属性,因此可以编写:

<ListView ItemsSource="{x:Bind VM.AlarmsVM}">

不幸的是,当我尝试构建项目时,我在 MainPage.g.i.cs 中收到错误:

Severity Code Description Project File LineError CS0305 Using the generic type 'BasePage' requires 1 type arguments Realarm D:...\Realarm\obj\x86\Debug\View\Pages\MainPage.g.i.cs 13

有什么帮助吗?

最佳答案

我使用 Xamarin.Forms 完成了这项工作。

基页:

public abstract class BaseContentPage<TViewModel> : ContentPage where TViewModel : BaseViewModel, new()

主页.cs:

public partial class HomePage : BaseContentPage<HomeViewModel>

HomePage.xaml:

<d:BaseContentPage 
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="clr-namespace:Sample.Pages;assembly=Sample"
xmlns:vm="clr-namespace:Sample.ViewModels;assembly=Sample"
x:Class="Sample.Pages.HomePage"
x:TypeArguments="vm:HomeViewModel">
<ContentPage.Content>
</ContentPage.Content>
</d:BaseContentPage>

关于xaml - 带有类型参数的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33708567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com