【问题标题】:WPF Prism Master Details formWPF Prism Master 详细信息表单
【发布时间】:2010-07-22 09:20:29
【问题描述】:

我正在使用使用 Prism 框架的 WPF 创建一个应用程序。 我已经为工具栏、菜单栏和工作区创建了 Shell 表单并在其中定义了区域。 在工作区中,我可以加载模块,但我有一个要求,我必须加载 Employee Master 表单,在网格中显示所有员工列表。在网格中双击该员工行时,它应该导航到员工详细信息表单。在这里,我不应该使用 Tab 控件。双击员工网格时,应关闭或卸载员工主表单,并加载员工详细信息屏幕。

Prism 专家对此有何建议。

感谢和问候, 哈利

【问题讨论】:

    标签: wpf prism


    【解决方案1】:

    我发现在这些情况下,人们正在寻找“棱镜化”他们的解决方案的地方。这是我在 Prism 中何时使用 EventAggregator 的经验法则:

    1. 无论事件的订阅者是否存在,该应用程序仍然有用
    2. 我不能使用常规的 .NET 事件或其他机制,因为订阅者是在另一个模块中定义的

    那是我唯一会使用 EventAggregator 来解决问题的时候。否则,我只使用 WPF 中内置的机制。特别是在主/细节场景中,这两个视图可能仅一起使用,使它们在逻辑上是相同的视图,而不是单独的视图。

    在这种情况下,我通常会做这样的事情(我在这种情况下省略了适当的 DataTemplates,但希望这足以说明您不需要任何花哨的东西来解决这个问题)。

    <ListBox ItemsSource="{Binding Turtles}" IsSynchronizedWithCurrentItem="True" />
    <ContentControl Source="{Binding Turtles/}" />
    

    这使用了一种简单的 WPF 机制,该机制显示集合中的项目列表,当用户选择一个项目时,“Turtles/”的值将更改为所选项目。简单的。无需将事情过度复杂化。

    如果您真的觉得您的场景需要使用 EventAggregator(符合上面的规则 #1 和 #2),那么请尽可能简单地这样做...监听由视图模型引发的事件并从视图模型(您使用的是 MVVM,对吗?)。再多的就是头疼了。

    【讨论】:

      【解决方案2】:

      我会为此使用 eventtaggregator,或者可能使用新的 VisualStateManager。

      我在使用 PRISM 时陷入的陷阱之一是过度考虑设计。我最终停止使用它并将它从我的项目中删除,事情变得更好了。虽然我仍然使用并喜欢 eventtaggregator...但是在整个区域和视图状态方面存在很大的学习曲线...

      【讨论】:

      • 您能否详细说明一下,因为我是这项技术的新手... Prism 在我的应用程序中是必须的
      • 告诉我为什么棱镜是必须的。我认为这也是必须的,直到我发现它不是......作为新手将它添加到您的项目中会极大地增加复杂性和学习曲线
      • 客户需求是这样的
      • 我看过你关于“WPF 中不同视图的主细节”的帖子,你能解释一下你是如何使用 Unity 容器处理的吗?您在那里使用 Prism 或其他框架吗?
      • 我知道上面的帖子是 8 年前的,但是,虽然上面可能技术上正确,PRISM 增加了应用程序的复杂性,但这种复杂性是完全值得的.您可能会说汽车中的安全气囊增加了汽车的复杂性,但它仍然是一项要求。使用 PRISM 以及随之而来的 MVVM 模式可以更轻松地与使用 MVVM/MVC 组件(如 .NET Core MVC 或 Xamarin.Forms)的其他语言进行交互。目前大多数语言都存在 MVVM/MVC 实现,因此在 WPF 应用程序中使用 PRISM 之类的东西总是一个好主意。
      猜你喜欢
      • 1970-01-01
      • 2018-01-30
      • 2019-05-06
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 2021-02-11
      相关资源
      最近更新 更多