我正在尝试遵循此处列出的 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>
?就目前而言,没有任何数据绑定(bind),这是我想要应用 View 模型的页面上的内容:
<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>
最佳答案
数据模板应用于内容,在大多数情况下,内容是 ContentControl 的 Content 属性或 ItemsControl 的 Items/ItemsSource 属性。页面不是从 ContentControl 派生的(UserControl 是),因此 DataTemplate 不能应用于其内容。
从你在这里所做的事情来看,这听起来并不是你想要做的。看起来您正在尝试在 DataTemplate 中使用页面,这就是错误告诉您的内容。页面被视为像窗口一样,因为它是一个根容器,旨在在 xaml 文件中定义可视内容。 UserControl 具有类似的用途,但可以插入布局中的任何位置。如果您将 vw:Vendors 更改为 UserControl,应该可以消除此特定错误,但您还应该考虑是否从 UserControl 中获得任何好处,而不是仅仅将其内容直接放入 DataTemplate - 这有助于阻止代码 -落后并强制你正确使用你的 ViewModel。
关于wpf - 是否可以将 DataTemplate 应用到页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2310208/