首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataTemplate ContentPresenter“绑定”

DataTemplate ContentPresenter“绑定”
EN

Stack Overflow用户
提问于 2014-03-19 11:24:22
回答 2查看 9.6K关注 0票数 8

有人能解释一下我在这里使用的代码是如何工作的吗?

代码语言:javascript
复制
<Window.Resources>
    <DataTemplate DataType="{x:Type VM:PBRKEntryViewModel}">
        <V:Overview  />
    </DataTemplate>
    <DataTemplate DataType="{x:Type VM:LoginViewModel}">
        <V:LoginView />
    </DataTemplate>
</Window.Resources>
<Grid>
    <ContentPresenter Content="{Binding CurrentView}"/>
</Grid>       

我目前的问题是:

  • 为什么ContentPresenter可以在不引用不同UserControl的情况下显示正确的DataTemplates?我可以看到,ContentPresenter内容被绑定到我的ViewModels CurrentViewProperty,但是我的DataTemplates没有?
  • 另一个很棒的特性是,UserControls使用正确的ViewModels而不需要声明。(或者没有声明,我可以看到)

我已经找到了这个描述http://msdn.microsoft.com/en-us/library/System.Windows.Controls.ContentPresenter(v=vs.110).aspx,但备注部分没有回答这个问题。(或者我看不到他们.)

为了清晰起见,一切都是完美的,但我不明白为什么,所以这只是一个了解模板的选择和绑定的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-19 11:27:41

指定DateTemplates属性的DataType将自动应用于视图中该类型的任何实例。这只是一种告诉WPF“每次您需要显示这种类型时,使用此模板”的方法。

您的ContentPresenter将其Content绑定到某个对象。如果该对象类型有一个匹配的模板,那么WPF将使用它。

票数 11
EN

Stack Overflow用户

发布于 2014-03-19 11:30:52

在您发布的链接的“备注”部分,这个声明非常清楚:

如果存在与内容类型关联的DataTemplate,则ContentPresenter将该DataTemplate应用于Content属性,并显示结果UIElement及其子元素(如果有的话)。

另外,如果您想知道dataTemplates是如何自动选择的,您可以在这里阅读- 数据模板概述

引用链接中的话:

DataTemplate类具有一个与Style类的TargetType属性非常相似的DataType属性。DataTemplate自动应用于与基础类型关联的所有对象。

这是一个类似于的东西。如果您没有在样式上指定任何x:Key,那么它将自动应用于定义资源的根元素下的所有子元素。

一旦您在样式上设置了x:Key,它就不再是默认样式,它将仅应用于显式设置该资源的元素。

DataTemplate也是如此。仅指定DataType时,表示基础数据类型将成为默认模板。显式指定x:Key将破坏此功能。

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

https://stackoverflow.com/questions/22504291

复制
相关文章

相似问题

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