我正在尝试遵循这里列出的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>
答案 0 :(得分:3)
DataTemplates应用于Content,在大多数情况下,Content是ContentControl的Content属性或ItemsControl的Items / ItemsSource属性。页面不是从ContentControl派生的(UserControl是),因此无法将DataTemplate应用于其内容。
从你在这里所做的事情看起来并不像你想要做的那样。看起来您正在尝试在DataTemplate中使用Page,这是错误告诉您的。页面被视为Window,因为它是一个根容器,旨在在xaml文件中定义可视内容。 UserControl具有类似的用途,但可以插入到布局中的任何位置。如果你改变vw:Vendors是一个应该摆脱这个特定错误的UserControl,你还应该考虑是否从使用UserControl获得任何东西而不是直接将其内容放入DataTemplate - 这可以帮助阻止代码 - 落后并强迫您正确使用ViewModel。