【发布时间】:2012-12-04 21:44:49
【问题描述】:
我正在创建一个还具有文件传输功能的聊天应用程序。我正在尝试使用 Prism 使用 MVVM 模式来设计它。
我的这个应用程序的模型,或者至少这个模块(应用程序此时只有一个模块,它可能是唯一的模块)是一个ChatManager类,负责托管服务器,加入服务器和持有聊天会话的所有状态信息。它可能是连接到另一台服务器的客户端,也可能既是客户端又是服务器,因为任何主持聊天的人也将是他自己服务器的客户端。
在我的应用程序中,程序的每个不同区域、消息区域、包含用户列表的区域以及用户键入消息的区域都有不同的视图和视图模型。视图对视图模型一无所知,视图模型对视图一无所知。视图模型非常简单,几乎不包含任何逻辑。
所有逻辑都驻留在我的 ChatController 类中,该类基本上控制应用程序的流程。它负责创建所有视图、所有模型,将适当的视图模型分配为视图的数据上下文,并在适当的时间将每个视图注入 shell。它还负责从模型中将实际数据分配给视图模型。
我遇到的问题是如何干净利落地保持 viewmodel ObservableCollections 与模型中包含的列表保持同步。例如,在模型中,我有一个已连接用户的列表。每当该列表发生变化时,例如当用户连接或断开连接时,我需要更新处理用户列表的视图模型中的用户的 ObservableCollection。
我认为我需要完成此任务的方式是使用事件。因此,我创建了每当用户连接、用户断开连接时在模型中触发的事件。当然,当服务器向所有用户发送消息以及模型实际执行的所有其他操作时,我也必须有事件。
我想我的问题是,这是一个好方法吗?我是否应该将模型的用户集合更改为 ObservableCollection 并完全避免事件,只需将视图模型的集合分配给模型集合?
我尝试构建此应用程序的次数越多,我就越感到困惑。现在我的控制器拥有的方法数量非常多,我什至还没有开始添加我想要的聊天程序的所有功能。
【问题讨论】: