gpt4 book ai didi

wpf - 我应该如何对同一数据实现多个 View ?

转载 作者:行者123 更新时间:2023-12-01 22:12:24 26 4
gpt4 key购买 nike

我有一个基于 MVVM/WPF 的应用程序,它可以同时打开多个工作区(基本上包含 TreeView),在同一数据树上显示和操作。我需要能够独立地展开和折叠以及选择每个工作区中的项目,并且我希望能够在两个工作区之间拖放项目(例如,用于移动或复制项目)。我还需要数据虚拟化,因为只有在第一次伸展树(Splay Tree)项时才会加载数据(在两个 View 中)。还有一个工作区范围的详细信息 View ,显示当前具有焦点的工作区中所选项目的详细信息。工作区特定的项目扩展和选择也必须以编程方式进行。

您能为基于 MVVM 的应用程序设计一个包含这些功能的 Ruff 设计吗?我应该为每个工作区创建一个单独的 ViewModel 树并实现模型-ViewModel 映射器吗?或者我应该只有一棵带有两个 View 的 ViewModel 树?详细信息 View 如何知道当前选择了什么以及哪个工作区具有焦点? ...

因此,重新表述我的问题:每个 View 中显示的模型实例实际上是相同的实例。但 ViewModel 也应该相同吗?或者更好:我能逃脱惩罚吗?

另外:是否有一个我可以研究的开源应用程序具有大部分这些功能? Prism 或任何其他基于 MVVM 的框架可以为我完成大部分工作吗?

最佳答案

View 和 ViewModel 之间存在直接关联。 View 显示模型的可视化表示,由 ViewModel 托管和“格式化”。

由于每个 View 上都有不同的模型(数据),因此您需要有多个 ViewModel 实例来托管每组不同的数据。

现在的问题是:您的 ViewModel 之间是否共享一些实体或对象?如果是,它们会在您的应用程序生命周期内发生变化吗?您想在 TreeView 中实时查看这些变化吗?

然后您有两个选择:

  1. 通过 ViewModel 公开模型,将模型直接绑定(bind)到 View (如果模型实现INotifyPropertyChanged):那么当模型属性更改时,所有 View 都会自动更新。
  2. 创建一个组件来监督模型修改并通知 ViewModel 公开它们。

第二个解决方案比第一个解决方案更纯粹,因为模型应该是 POCO 并且不应该实现一些面向管道的接口(interface)。 ViewModel 应该处理管道。

但是设计起来比较复杂,90% 的情况下,你最终会说“来吧,只有一个小界面不会有什么坏处”:)

用于您的详细信息 View 。您可以使用中介器(MVVM Light Toolkit 中的 Messenger)在 TreeViewModel 和 DetailViewModel 之间进行通信,该中介器基本上是一个低耦合的面向事件的组件。或者使用注入(inject)到所有 ViewModel 中的主管并使用事件通知它们。

说到 MVVM 框架,对于您所描述的常见架构,我会推荐 MVVM Light Toolkit .

关于wpf - 我应该如何对同一数据实现多个 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6506108/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com