有人可以解释一下我在这里使用的代码是如何工作的吗?
<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,但备注部分对此问题没有答案。 (或者我看不到他们......)
再次,为了清楚起见,一切都很完美,但我不明白为什么,所以这只是一个理解选择模板和绑定的问题。
答案 0 :(得分:11)
指定DataType属性的DateTemplates将自动应用于视图中该类型的任何实例。这只是告诉WPF“每次需要显示此类型时,使用此模板”的方法
您的ContentPresenter
将Content
绑定到某个对象。如果该对象类型具有匹配的模板,则WPF将使用它。
答案 1 :(得分:6)
在链接的备注部分,您发布的内容非常清楚:
如果存在与内容类型相关联的DataTemplate,则 ContentPresenter将DataTemplate应用于Content属性和 显示生成的UIElement及其子元素(如果有)。
此外,如果您想知道如何自动选择dataTemplates,您可以在此处阅读 - Data Templating Overview。
从链接引用:
DataTemplate类具有与之非常相似的DataType属性 Style类的TargetType属性。 DataTemplate得到应用 自动到与基础类型相关联的所有对象。
类似于样式。如果您没有在样式上指定任何x:Key
,它将自动应用于属于定义资源的根元素下的所有子元素。
只要在Style上设置x:Key
,它就不再是默认样式,只会应用于显式设置此资源样式的元素。
同样适用于DataTemplate
。仅指定DataType
时,它将成为表示基础数据类型的默认模板。明确指定x:Key
会破坏此功能。