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

时间:2010-02-22 10:21:56

标签: wpf mvvm datatemplate viewmodel

我正在尝试遵循这里列出的MVVM模式:http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090097我在MainWindowResources.xaml文件中有这个:

<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文件包含左侧的菜单和右侧的页面持有者。我可以将dataTemplate应用于<Page>吗?或者它必须是<UserControl>?事实上,没有任何数据绑定,这是我在页面上我想要应用viewmodel的内容:

<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>

1 个答案:

答案 0 :(得分:3)

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

从你在这里所做的事情看起来并不像你想要做的那样。看起来您正在尝试在DataTemplate中使用Page,这是错误告诉您的。页面被视为Window,因为它是一个根容器,旨在在xaml文件中定义可视内容。 UserControl具有类似的用途,但可以插入到布局中的任何位置。如果你改变vw:Vendors是一个应该摆脱这个特定错误的UserControl,你还应该考虑是否从使用UserControl获得任何东西而不是直接将其内容放入DataTemplate - 这可以帮助阻止代码 - 落后并强迫您正确使用ViewModel。