我正在使用WPF构建聊天应用程序,我试图了解哪种方法是实现它的最佳方法。 我在ViewModel中有一个“接收”事件,当一条消息到达时,我想将它添加到一个ObservableCollection中,该ObservableCollection包含发送到聊天会话的所有消息。
当消息从新用户到达时,我必须打开一个新的聊天窗口,如果消息来自已经创建了窗口的用户,我必须添加消息。
为所有消息提供唯一的ObservableCollection是一件好事吗?如果是这样,我如何通知视图新用户已收到消息?我如何在集合中添加“过滤器”以便为用户提供数据绑定消息?
答案 0 :(得分:1)
如果你向ObservableCollection添加项目,你在视图中的控件(任何东西的网格/列表视图)应该在绑定它时自动更新。但这意味着您需要为每个新用户创建新的聊天集合。如果数据检索不在GUI线程,请确保已处理所有线程问题。
我会仔细考虑如何设计这个:
您是否有兴趣保留/保存聊天记录?
您可以使用像Solace这样的其他邮件传输吗?
答案 1 :(得分:1)
我认为你走在正确的轨道上。您可以采取以下一种方法:
坚持使用MVVM模式,您的模型将监听新消息。它可以维护当前视图/视图模型和用户对的列表。如果来自新用户的消息到达,则创建一个新视图&其对应的viewmodel,然后只是将消息添加到viewmodel中的ObservableCollection。因为ObservableCollection实现了INotifyCollectionChanged interface,所以当一个新项添加到集合中时,绑定到它的任何UI元素都会自动得到通知,然后应该显示它。
如果你想要变得非常棘手和超级高效,你可以拥有一个所有单独视图都绑定的视图模型,并且他们可以使用过滤机制来隔离他们应该显示的正确消息(提示:使用值转换器绑定到ObservableCollection)。这样做意味着你只维护一个viewmodel和一个ObservableCollection,它减少了你需要跟踪的项目数量。