有人能解释一下我在这里使用的代码是如何工作的吗?
<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> 我目前的问题是:
我已经找到了这个描述http://msdn.microsoft.com/en-us/library/System.Windows.Controls.ContentPresenter(v=vs.110).aspx,但备注部分没有回答这个问题。(或者我看不到他们.)
为了清晰起见,一切都是完美的,但我不明白为什么,所以这只是一个了解模板的选择和绑定的问题。
发布于 2014-03-19 11:27:41
指定DateTemplates属性的DataType将自动应用于视图中该类型的任何实例。这只是一种告诉WPF“每次您需要显示这种类型时,使用此模板”的方法。
您的ContentPresenter将其Content绑定到某个对象。如果该对象类型有一个匹配的模板,那么WPF将使用它。
发布于 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将破坏此功能。
https://stackoverflow.com/questions/22504291
复制相似问题