Правильно ли публиковать ObservableCollection для сообщений в приложении чата? - PullRequest
0 голосов
/ 29 июня 2011

Я создаю приложение чата с использованием WPF и пытаюсь понять, какой из них является наилучшим подходом для его реализации. У меня есть событие «получить» в моей ViewModel, и когда приходит сообщение, я думаю добавить его в ObservableCollection, которая содержит все сообщения, отправленные и полученные в сеансе чата.

Мне нужно открыть новое окно чата, когда приходит сообщение от нового пользователя, и мне нужно добавить сообщение, если оно приходит от пользователя, для которого окно уже было создано.

Хорошо ли иметь уникальную коллекцию ObservableCollection для всех сообщений? Если да, то как я могу сообщить, что пришло сообщение для нового пользователя? И как я могу поместить «фильтр» в коллекцию для сообщений привязки данных для пользователей?

Ответы [ 2 ]

1 голос
/ 29 июня 2011

Я думаю, вы на правильном пути. Вот один из подходов, который вы можете использовать:

придерживаясь паттерна MVVM, ваша модель будет прослушивать новые сообщения. Он может поддерживать список текущих view / viewmodel и пользовательских пар. Если сообщение приходит от нового пользователя, создайте новое представление и соответствующую ему модель представления, а затем просто добавьте сообщения в коллекцию ObservableCollection в модели представления. Поскольку ObservableCollection реализует интерфейс INotifyCollectionChanged , любой привязанный к нему элемент пользовательского интерфейса будет автоматически получать уведомление при добавлении нового элемента в коллекцию и должен отображать его.

Если вы хотите получить действительно хитрый и сверхэффективный инструмент, у вас может быть одна модель представления, с которой связаны все отдельные представления, и они могут просто использовать механизм фильтрации, чтобы выделить правильные сообщения, которые они должны показывать (подсказка: используйте преобразователь значений на привязку к ObservableCollection). Выполнение этого означает, что вы поддерживаете только одну модель представления и одну коллекцию ObservableCollection, и это сокращает количество элементов, которые необходимо отслеживать.

1 голос
/ 29 июня 2011

Если вы добавляете элемент в ObservableCollection, и ваш элемент управления в представлении (будь то grid / listView чего-либо) должен автоматически обновляться, когда он привязан к нему.Но это означает, что вам нужно будет иметь новую коллекцию чатов для каждого нового пользователя.Убедитесь, что вы справились со всеми проблемами с потоками, если ваш поиск данных не выполняется в GUI Thread.

Я бы тщательно подумал о том, как бы я сконструировал это:

  • Вы заинтересованы в сохранении / сохранении истории чата?

  • Можно ли использовать другие транспорты обмена сообщениями, такие как Solace?

...