我的MVVM Windows Phone项目中有以下模型
public class ConversationModel
{
public string FromUserId { get; set; }
public string FromUserName { get; set; }
public ObservableCollection<string> Messages { get; set; }
public DateTime TimeSent { get; set; }
}
我的ConversationViewModel中有以下属性。 Conversation.xaml使用以下属性并将其绑定到其UI元素,并且数据显示正确。
private ConversationModel _ConvData;
public ConversationModel ConvData
{
get
{
return App.gAllConversations.Where(x => x.FromUserId == App.gCurrentUserId).FirstOrDefault();
}
set { _ConvData = value;RaisePropertyChanged("ConvData"); }
}
当我使用NavigationService.Navigate()调用Conversation.xaml时,它通过从gAllConversations中提取数据来显示与BuddyA的现有聊天数据,这是一个obversableModel的observableCollection。当我在Conversation.xaml窗口中并且如果我从当前Conversation.xaml的BuddyA的同一FromUserId收到新的Toast通知消息时,我只想通过将此新消息附加到ConversationModel来更新它的ObservableCollection Messages属性。聊天/对话窗口中现有消息的列表。这是因为当Conversation.xaml被导航并且稍后在Conversation.xaml.cs中更新相同的BuddyA内容时,首先调用属性ConvData set方法OnNavigatedTo方法已成功将现有数据更新到UI,并且稍后还附加了新消息
当我在收到BuddyA的新Toast通知时尝试修改Conversation.xaml.cs中的gAllConversations时,如果我已经在BuddyA的窗口中,那么如果BuddyA是BuddyA,则UI会显示来自BuddyA的新消息已经存在于之前的gAllConversations中。现在,当我在UserB的conversation.xaml窗口中,如果我收到来自UserB的新消息(gAllConversation对象中没有与userB的现有聊天记录),我正在加载Conversation.xaml(点击通知时此次设置属性为ConvData将没有设置,因为没有数据)和Conversation.xaml.cs当我尝试向集合中添加新条目以启动ConvB的新会话时我没有看到因为设置而反映在UI中的更改属性调用最初会设置空数据。我该如何解决这个问题?
是否有更好的方法来处理整个场景,以便我可以避免在Conversation.xaml.cs的代码中编写代码。如果有另一种方法可以干净地处理这些对话,请告诉我。