首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >视图模型-在通用Windows应用程序中的视图绑定

视图模型-在通用Windows应用程序中的视图绑定
EN

Stack Overflow用户
提问于 2015-12-14 17:45:50
回答 1查看 833关注 0票数 0

在WPF中,可以通过在DataTemplate中放置带有视图模型和视图类型的app.xaml来实现模型绑定。然后,您只需将视图模型绑定到内容演示器,如果通过某种事件更改视图模型,则视图将发生更改。

这是旧代码:

App.xaml (AView和BView只是用户控件)

代码语言:javascript
复制
<Application.Resources>
    <DataTemplate DataType="{x:Type viewModels:AViewModel}">
        <views:ViewA/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type viewModels:BViewModel}">
        <views:ViewB/>
    </DataTemplate>
</Application.Resources>

然后,在包含当前上下文的某种子视图上:

代码语言:javascript
复制
<ContentPresenter Content="{Binding CurrentViewModel}" />

(很像https://stackoverflow.com/a/22376718/82333)

然而,数据板语法不再起作用。我已经阅读了x:bind,但是对viewmodel类型做一个基本的替换并不能修复它。

使用此语法:

代码语言:javascript
复制
<Application.Resources>
    <DataTemplate x:Key="ViewAKey" x:DataType="viewModels:AViewModel">
        <views:ViewA/>
    </DataTemplate>
    <DataTemplate x:Key="ViewBKey" x:DataType="viewModels:BViewModel">
        <views:ViewB/>
    </DataTemplate>
</Application.Resources>

导致以下几个错误:

Visual抱怨视图模型不在我提供的命名空间中。

XBF generation error code 0x09c4

在Windows 10通用应用程序中,此操作的等效语法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-15 08:33:38

在WPF中,DataType是一个依赖项属性,可以在运行时中检索。

在UWP中,x:DataType是编译时属性,不能在运行时获得值。x:DataType正在与{x:Bind}合作。当在x:DataType中使用Application.Resources时,它会引发XBF generation error,因为编译器无法生成代码。{x:Bind}取决于代码生成,如果在资源字典中使用{x:Bind},则资源字典需要有一个代码隐藏类。然后,您可以通过实例化它的类型而不是引用它的文件名来重用资源字典。有关如何在资源字典中使用{x:Bind}的详细信息,请参阅具有{x:Bind}的资源字典

如果需要根据模型类型切换DataTemplate,则需要使用DataTemplateSelector类

有关如何通过如何将视图与视图模型或多个DataTemplates关联为ViewModel?映射UWP中的数据类型和数据模板的示例,请参见类似的案例:DataTemplateSelector

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34273385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档