wpf - 是否可以将 DataTemplate 应用到页面?

标签 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> ?就目前而言,没有任何数据绑定(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/

相关文章:

c# - 名称 <> 在命名空间 <> 中不存在(对于库项目)

c# - WPF 正确处理 View 和 View 模型

Java MVVM 和 WPF 替代方案

c# - 如何编写具有某些功能的 DataTemplate 作为资源

c# - WPF - 从 DataTemplate 创建 UI 对象

c# - WPF:最适合显示大量文本的 UI 元素?

c# - 为什么我的 Storyboard 只运行一次?

WPF:鼠标左键单击并按住处理

wpf - MVVM Light 和 MVVM 有什么区别?

xaml - 银光 4.0 : DataTemplate Error