【发布时间】:2010-10-26 18:51:30
【问题描述】:
我的理解是 Silverlight 不支持具有 DataType 属性的 DataTemplates。
那么您将如何在 SL 中完成以下任务(作者是 Josh Smith,完整链接如下)。简而言之,他的意思是,如果您将 TabControl 的选项卡页绑定到 ViewModel 集合,WPF 将通过查找具有适当(匹配)DataType 集的 DataTemplate 来找出如何动态显示每个选项卡。太酷了,但我想知道您将如何(可以?)在 Silverlight 中做到这一点。
将视图应用于 ViewModel
MainWindowViewModel 间接添加 并删除 WorkspaceViewModel 对象进出主窗口 选项卡控件。依靠数据 绑定,a 的 Content 属性 TabItem 收到一个 ViewModelBase 派生对象 展示。 ViewModelBase 不是 UI 元素,所以它没有内在的支持 用于渲染自身。默认情况下,在 WPF 一个非可视对象由 显示调用结果 它在 TextBlock 中的 ToString 方法。 这显然不是你需要的, 除非你的用户有燃烧 希望看到我们的类型名称 ViewModel 类!
你可以很容易地告诉 WPF 如何渲染 使用类型化的 ViewModel 对象 数据模板。类型化的 DataTemplate 没有分配 x:Key 值 给它,但它确实有它的 DataType 属性设置为 类型类。如果 WPF 尝试渲染一个 您的 ViewModel 对象,它将 检查资源系统是否 在范围内有一个类型化的 DataTemplate 其 DataType 与(或 基类)你的类型 视图模型对象。如果它找到一个,它 使用该模板来呈现 选项卡引用的 ViewModel 对象 项目的 Content 属性。
MainWindowResources.xaml 文件有 资源字典。那本词典 被添加到主窗口的资源中 层次结构,这意味着 它包含的资源在 窗口的资源范围。当一个选项卡 项目的内容设置为 ViewModel 对象,来自此的类型化 DataTemplate 字典提供了一个视图(也就是说,一个 用户控件)来呈现它,如图所示 在图 10 中。在图 10 中。
http://msdn.microsoft.com/en-us/magazine/dd419663.aspx 在图 10 中。
【问题讨论】:
标签: silverlight mvvm