小编Vik*_*ess的帖子

带有类型参数的页面

我想使用 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;            
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

<pages:BasePage
x:Class="Realarm.View.Pages.MainPage"
x:TypeArguments="viewModel:MainVM">
Run Code Online (Sandbox Code Playgroud)

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

<ListView ItemsSource="{x:Bind VM.AlarmsVM}">
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我尝试构建项目时,在 MainPage.gics 中出现错误:

严重性代码描述项目文件行错误 CS0305 使用通用类型“BasePage”需要 1 个类型参数 Realarm D:...\Realarm\obj\x86\Debug\View\Pages\MainPage.gics 13

有什么帮助吗?

generics xaml mvvm xbind windows-10-universal

6
推荐指数
1
解决办法
1218
查看次数

标签 统计

generics ×1

mvvm ×1

windows-10-universal ×1

xaml ×1

xbind ×1