public MainViewModel(Chat tcpChat) { chat = tcpChat; chat.OnMessageRecieved += HandleRecievedMessage; chat.OnStrokeRecieved += HandleRecievedStroke; chat.OnUserConnected += user => { Application.Current.Dispatcher.Invoke(() => { if (OnlineUsers.Contains(user)) { return; } OnlineUsers.Add(user); }); }; chat.OnUserLogout += user => { Application.Current.Dispatcher.Invoke(() => { if (!OnlineUsers.Contains(user)) { return; } OnlineUsers.Remove(user); }); }; chat.OnUsersListReceived += users => { Application.Current.Dispatcher.Invoke(() => { foreach (var user in users) { if (OnlineUsers.Contains(user)) { continue; } OnlineUsers.Add(user); } }); }; Messages = new ObservableCollection <ChatMessage>(); Strokes = new ObservableCollection <Stroke>(); OnlineUsers = new ObservableCollection <string>(); OpenDrawRoomCommand = new RelayCommand(x => { WindowService.ShowWindow(new DrawingRoomViewModel(chat)); }); SendMessageCommand = new RelayCommand(x => { if (!chat.IsConnected) { MessageBox.Show("Connection Failed"); return; } if (string.IsNullOrWhiteSpace(TextField)) { return; } chat.Send(TextField); TextField = ""; OnPropertyChanged("TextField"); }); }