是否可以将DataTemplate应用于页面?

是否可以将DataTemplate应用于页面?

问题描述:

我试图按照奠定了这里MVVM模式:在我MainWindowResources.xaml文件http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090097我有这样的:是否可以将DataTemplate应用于页面?

<DataTemplate DataType="{x:Type vm:VendorsViewModel}"> 
     <vw:Vendors/> <--- I get a "Can't put a page in a style" error in blend with this 
</DataTemplate> 

,我已经在我的MainWindow.xaml文件得到这个

<Window.Resources> 
    <ResourceDictionary Source="MainWindowResources.xaml"/> 
</Window.Resources> 

mainWindow.xaml文件的左侧包含一个菜单,右侧包含一个页面持有者。我可以将数据模板应用于<Page>吗?或者它是否必须是<UserControl>?既然这样,什么都没有数据绑定,这里就是我的,我想有视图模型在页面上适用于:

<Custom:DataGrid Margin="0,30,0,0" d:LayoutOverrides="Width" ItemsSource="{Binding Path=AllVendors, Mode=Default}" > 
    <Custom:DataGrid.Columns> 
    <Custom:DataGridTextColumn Header="Company Name" Binding="{Binding Path=Name}" /> 
    </Custom:DataGrid.Columns> 
</Custom:DataGrid> 
+0

@Mike,你必须标记的标签元素代码,否则将无法呈现。没有人会理解你的问题 - 我这样做了,你这个时候( - : – Murph 2010-02-22 10:25:07

的DataTemplates应用于内容,这在大多数情况下,要么是内容属性ContentControl或ItemsControl的Items/ItemsSource属性。页面不是从ContentControl派生的(UserControl是),因此DataTemplate不能应用于其内容。

从你在这里做什么它听起来并不像这就是你想要虽然做什么。它看起来像你试图在DataTemplate中使用一个页面,这是错误告诉你的。 Page被视为Window,因为它是一个根目录容器,用于在xaml文件中定义可视内容。 UserControl具有类似的用途,但可以插入布局的任何位置。如果你改变大众:厂商是应该摆脱此特定错误的用户控件,但你也应该考虑是否你是从具有用户控件,而不是仅仅把它的内容直接进入DataTemplate中得到什么 - 这可以帮助阻止代码 - 并迫使您正确使用您的ViewModel。

+0

我最初的目标是使用基于导航的WPF应用程序,使用不同的页面导航到和来自。如果我要使用UserControls,我将如何完成相同类型的事情?在哪里单击菜单中的项目,并显示UserControl?布局项目,如网格,然后将用户控件添加到从电网 – Mike 2010-02-22 21:14:05

+1

好像你可能会在这里混淆一​​些概念你使用网页的目标似乎是正确的 - ?。他们是专门为支持基于URI导航,我认为在那里你试图使用一个DataTemplate,你实际上想要将你的Page的DataContext设置为你的VendorsViewModel类的一个实例,这就是允许你绑定t o您的VM的属性来自Page的XAML,就像您在最后一个代码片段中所做的一样。您可以通过XAML或代码(如外部工厂或演示者)在页面上设置DataContext。 – 2010-02-23 05:45:27