Я бы создал ApplicationViewModel
, который содержит экземпляр вашей основной модели (который может быть объектом Jabber), и передал бы экземпляр другим виртуальным машинам, которые он создает, чтобы они могли регистрироваться для обработки событий, которые вызывает модель.(Я предполагаю, основываясь на вашем описании, что, когда Jabber получает сообщение, оно вызывает событие и передает сообщение в EventArgs
.)
Если вы сделаете это, то когда придет новое сообщение,ваш ChatSessionsViewModel
может проверить его, чтобы увидеть, находится ли он в новом сеансе, и создать новый ChatSessionViewModel
, если это так.Ваш ChatSessionViewModel
может проверить сообщение, чтобы увидеть, принадлежит ли оно к сеансу, и добавить его в свою коллекцию сообщений, если это так.Эти две операции полностью независимы друг от друга.
Я бы не помещал все сообщения чата в одну коллекцию, а затем использовал бы модели представления сеанса для их фильтрации - фильтрация элементов в коллекции - это O (n)операции, и если вы создаете чат-клиент, n станет очень большим.Гораздо логичнее, чтобы сеанс чата проверял сообщение по мере его поступления и захватывал его, если оно принадлежит сеансу.
Но это действительно зависит от приложения.Если вы подойдете к этому так, есть вероятность, что придет сообщение, которое ничего не обрабатывает, и оно будет отброшено.Это нормально?