我正在创建一个聊天应用程序,它也将具有文件传输功能。我正在尝试使用 Prism 的 MVVM 模式来设计它。
我对这个应用程序的模型,或者至少这个模块(应用程序此时只有一个模块,并且它可能是唯一的模块),是一个 ChatManager 类,负责托管服务器、加入服务器和持有聊天 session 的所有状态信息。它可能是连接到另一台服务器的客户端,也可能既是客户端又是服务器,因为主持聊天的任何人也将是他自己的服务器的客户端。
在我的应用程序中,对于程序的每个不同区域、消息区域、具有用户列表的区域以及用户键入消息的区域,我都有不同的 View 和 View 模型。 View 对 View 模型一无所知, View 模型对 View 一无所知。 View 模型非常简单,几乎不包含任何逻辑。
所有逻辑都在我的 ChatController 类中,该类基本上控制应用程序的流程。它负责创建所有 View 、所有模型、分配适当的 View 模型作为 View 的数据上下文,并在适当的时间将每个 View 注入(inject) shell。它还负责将实际数据从模型分配给 View 模型。
我遇到的问题是如何使 View 模型 ObservableCollections 与模型中包含的列表保持同步。例如,在模型中我有一个已连接用户的列表。每当该列表发生变化时,例如当用户连接或断开连接时,我需要在处理用户列表的 View 模型中更新用户的 ObservableCollection。
我认为我需要使用事件来完成此任务。所以我创建了在用户连接时在模型中触发的事件,只要用户断开连接。当然,当服务器向所有用户发送消息以及模型实际执行的所有其他操作时,我也必须有事件。
我想我的问题是,这样做是不是一个好方法?我是否应该将模型的用户集合更改为 ObservableCollection 并完全避免事件,只需将 View 模型的集合分配给模型集合?
我越是尝试构建这个应用程序,它就越让我感到困惑。现在我的 Controller 拥有的方法数量非常多,我什至还没有开始添加我想要的聊天程序的所有功能。
最佳答案
我认为整个问题都是多余的,因为最后一段 :)
ObservableCollection 是 System.Collections.ObjectModel 的一部分。它与任何特定的 UI 技术无关,所以我认为没有必要将它限制在 View 模型中,而不是将其置于核心并替换您的列表。
关于wpf - 保持模型与 View 模型同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13920212/