【问题标题】:How to do Regions in WPF without Prism?如何在没有 Prism 的情况下在 WPF 中做区域?
【发布时间】:2010-07-19 20:30:56
【问题描述】:

特别是在 MVVM Light 工具包中?我还没有深入研究 Prism 代码,看看它对 WPF UI 中的区域做了什么。似乎使用 MVVM Light 中的消息传递和 ViewModelLocator 可以做类似的事情......你可以吗?任何人都可以举一些关于如何做到这一点的例子吗?本质上,我想单击一个按钮并将两个不同的视图模型加载到 UI 中。也许更好的解释方式是类似于 Outlook 的导航窗格功能。

【问题讨论】:

    标签: wpf user-interface mvvm-light


    【解决方案1】:

    这可以在 WPF 中相当容易地完成,无需任何框架。

    只需在您的应用程序中(或在 Window/UserControl 级别)设置一个 DataTemplate,将 ViewModel 映射到您希望为该 ViewModel 显示的视图。

    然后您可以只使用 ContentPresenter,并将其内容绑定到 ViewModel 中的单个属性(可以是 object 类型)。当您想将“区域”设置为特定视图时,只需将属性设置为适当的 ViewModel,WPF 就会自动为您连接所有内容。

    【讨论】:

    • 太好了,我想也应该有一个 XAML 方式。谢谢。
    • 好的。一定是我理解不够。我想我没有设置数据模板。不知道如何将 ViewModel 映射到 View 这样做。我假设是这样,所以我没有像现在这样得到对象名称。但这是否意味着视图必须知道要显示什么视图模型?
    • @nportelli:某处的 View 层需要指定“ViewModel XXX 转到 View YYY”。就是这样。阅读我的 MVVM 系列中关于“模板化”的部分(并可选择查看示例代码)。它使用这种技术并描述了如何使 DataTemplates 工作:reedcopsey.com/series/windows-forms-to-mvvm
    • 好吧,在看了这个解决方案之后,我不确定我是否喜欢它。它需要主视图或父视图了解所有其他视图......似乎很脏。是我太挑剔了吗?
    • @nportelli:这很挑剔,但也让我很困扰。我实际上使用 DI 将 DataTemplates 注入到我的应用程序资源中,并使用合并的资源字典(在运行时解析)来处理此映射。这使我不必将其实际放入“父”或“主视图”级别的代码中......
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 2014-12-28
    相关资源
    最近更新 更多