Hello,
I have an application where I store and add messages from the database. On startup I manually ladd the last so much messages from the database.
When I initially load, all messages and TimeBreaks are displayed fine. However the last message is not in view. The Chat shows the first lines and the scroll bar is positioned at the top, not at the bottom.
When I add new messages via the inputline, the message is in view
I use Telereik 2024.3.821.462
These message are added using the followin code:
View (code behind) => SendMessage event
private void RadChat_SendMessage(object sender, SendMessageEventArgs e)
{
e.Handled = true;
var updatedMessageText = (e.Message as TextMessage).Text;
ViewModel.AddMessage(updatedMessageText);
}
ViewModel => AddMessages
public async void AddMessage(string updatedMessageText)
{
Message newMessage = new Message();
newMessage.Author = CurrentAuthor.Name;
newMessage.MessageDate = DateTime.Now;
newMessage.MessageText = updatedMessageText;
newMaxMessageId = _dashboardDao.InsertMessages(newMessage);
ReadMessages();
}
private async void ReadMessages()
{
IsReloading = true;
newMaxMessageId = _dashboardDao.GetMaxMessageID();
if (newMaxMessageId > currentMaxMessageId)
{
IEnumerable<Message> newMessages = await _dashboardDao.GetNewMessages(currentMaxMessageId, _sharedVM.NumMessageBoardMessages);
newMessages = newMessages.OrderBy(x => x.MessageId).ToList();
if (newMessages.Count() > 0)
{
if (!IsActive)
{
if (_ShowNewMessages)
{
numNewMessages += newMessages.Count();
HasMessagesData hasMessagesData = new HasMessagesData(true, numNewMessages);
_sharedVM.HasMessages = hasMessagesData;
}
else
{
numNewMessages = 0;
}
}
else
{
numNewMessages= 0;
}
NewTextMessages = new ObservableCollection<TextMessageModel>();
newMessages = newMessages.Where(x => x.MessageId > currentMaxMessageId);
NewTextMessages.Clear();
foreach (Message message in newMessages)
{
if (message.Author == CurrentUser)
{
NewTextMessages.Add(new TextMessageModel() { Text = message.MessageText, Author = CurrentAuthor, CreationDate = message.MessageDate });
}
else
{
NewTextMessages.Add(new TextMessageModel() { Text = message.MessageText, Author = new Author(message.Author), CreationDate = message.MessageDate });
}
if (_ShowNewMessages)
{
_eventAggregator.GetEvent<NewMessageShownEvent>().Publish();
}
}
currentMaxMessageId = newMessages.Last().MessageId;
OnPropertyChanged(nameof(NewTextMessages));
}
}
_ShowNewMessages = true;
IsReloading = false;
}
View (code behind) triggerd by OnPropertyChanged(nameof(NewTextMessages))
his.ViewModel.PropertyChanged += (sender, args) =>
{
if (args.PropertyName == "NewTextMessages")
{
AddNewMessages();
}
};
private void AddNewMessages()
{
foreach (var newMessage in ViewModel.NewTextMessages)
{
if (chat.LastMessage == null)
{
this.chat.AddTimeBreak(newMessage.CreationDate.DayOfWeek.ToString() + " " + newMessage.CreationDate.ToString("MMMM") + " " + newMessage.CreationDate.Day.ToString() + ", " + newMessage.CreationDate.Year);
}
else
{
if ((chat.LastMessage.CreationDate.Year != newMessage.CreationDate.Year) || (chat.LastMessage.CreationDate.Month!= newMessage.CreationDate.Month) || (chat.LastMessage.CreationDate.Day != newMessage.CreationDate.Day))
{
this.chat.AddTimeBreak(newMessage.CreationDate.DayOfWeek.ToString() + " " + newMessage.CreationDate.ToString("MMMM") + " " + newMessage.CreationDate.Day.ToString() + ", " + newMessage.CreationDate.Year);
}
}
var textMessage = new TextMessage(newMessage.Author, newMessage.Text, "sent", newMessage.CreationDate);
this.chat.AddMessage(textMessage);
}
}