我正在创建一个也可以进行文件传输的聊天应用程序。我试图用利用Prism的MVVM模式设计它。
我的这个应用程序的模型,或者至少这个模块(应用程序目前只有一个模块,它可能是唯一的模块),是一个ChatManager类,负责托管服务器,加入服务器和持有聊天会话的所有状态信息。它可能是连接到另一台服务器的客户端,也可能是客户端和服务器,因为任何主持聊天的人也都是他自己服务器的客户端。
在我的应用程序中,我为程序的每个不同区域,消息区域,具有用户列表的区域以及用户键入其消息的区域提供了不同的视图和视图模型。视图对视图模型一无所知,视图模型对视图一无所知。视图模型非常简单,几乎没有逻辑。
所有逻辑都驻留在我的ChatController类中,它基本上控制着应用程序的流程。它负责创建所有视图,所有模型,将适当的视图模型指定为视图的datacontexts,并在适当的时间将每个视图注入到shell中。它还负责从模型中将实际数据分配给视图模型。
我遇到的问题是如何使用模型中包含的列表清晰地保持viewmodel ObservableCollections的最新状态。例如,在模型中,我有一个连接用户列表。每当该列表发生更改时,例如当用户连接或断开连接时,我需要在处理用户列表的viewmodel中更新用户的ObservableCollection。
我认为我需要完成此任务的方式是使用事件。因此,无论何时用户断开连接,我都会创建在模型中触发的事件。当服务器向所有用户发送消息以及模型实际执行的所有其他事情时,我当然也必须有事件。
我想我的问题是,这是一个很好的方法吗?我是否应该将模型的用户集合更改为ObservableCollection并完全避免事件,只需将viewmodel的集合分配给模型集合?
我尝试构建此应用程序越多,它对我来说就越混乱。现在我的控制器的方法数量非常大,我甚至没有开始添加我想要的聊天程序的所有功能。
答案 0 :(得分:0)
我认为整个问题是多余的,因为最后只有一段:)
ObservableCollection是System.Collections.ObjectModel的一部分。它与任何特定的UI技术无关,因此我认为没有必要将其局限于视图模型,而不是将其放在核心并替换您的列表。