3

我正在创建一个聊天应用程序,它也将具有文件传输的能力。我正在尝试使用 Prism 使用 MVVM 模式来设计它。

我的这个应用程序的模型,或者至少这个模块(应用程序此时只有一个模块,并且它可能是唯一的模块)是一个 ChatManager 类,负责托管服务器,加入服务器并保存所有状态聊天会话的信息。它可能是连接到另一个服务器的客户端,或者它可能既是客户端又是服务器,因为任何主持聊天的人也将是他自己服务器的客户端。

在我的应用程序中,程序的每个不同区域、消息区域、具有用户列表的区域以及用户键入消息的区域都有不同的视图和视图模型。视图对视图模型一无所知,视图模型对视图一无所知。视图模型非常简单,几乎不包含任何逻辑。

所有逻辑都位于我的 ChatController 类中,该类基本上控制应用程序的流程。它负责创建所有视图、所有模型,将适当的视图模型分配为视图的数据上下文,并在适当的时间将每个视图注入 shell。它还负责从模型中将实际数据分配给视图模型。

我遇到的问题是如何干净地保持 viewmodel ObservableCollections 与模型中包含的列表保持同步。例如,在模型中,我有一个已连接用户的列表。每当该列表发生变化时,例如当用户连接或断开连接时,我需要在处理用户列表的视图模型中更新用户的 ObservableCollection。

我认为我需要完成此操作的方式是使用事件。因此,我创建了每当用户连接、用户断开连接时在模型中触发的事件。当然,当服务器向所有用户发送消息以及模型实际执行的所有其他操作时,我也必须有事件。

我想我的问题是,这是一个好方法吗?我是否应该将模型的用户集合更改为 ObservableCollection 并完全避免事件,只需将视图模型的集合分配给模型集合?

我越是尝试构建这个应用程序,它就越让我感到困惑。现在我的控制器拥有的方法数量非常多,我什至还没有开始添加我想要的聊天程序的所有功能。

4

1 回答 1

1

我认为整个问题是多余的,因为最后一段是:)

ObservableCollection 是 System.Collections.ObjectModel 的一部分。它与任何特定的 UI 技术无关,因此我认为没有必要将其限制在视图模型中,而不是将其放在核心中并替换您的列表。

于 2012-12-17T19:02:24.890 回答