///// <summary> Обработчик изменения модели внутри логики C++ </summary> //public void DoCallback(object sender, DoCallbackArgs e) //{ //if (e.ModelName == "Chats") //{ // Action action = () => ChangedListModelChat(e.EntityIds); // CurrentDispatcher.BeginInvoke(action); //} //if (e.ModelName == "ChatMessages") //{ // Action action = () => ChangedListModelChatMessages(e.EntityIds); // CurrentDispatcher.BeginInvoke(action); //} //if (e.ModelName == "ContactsPresence") //{ // CurrentDispatcher.BeginInvoke(new Action(ChangedStatusListModelContact)); //} //} ///// <summary> Обработчик изменения списка чатов внутри логики C++ </summary> //private void ChangedListModelChatMessages(string[] entityIds) //{ // // вот этот код перенести в колбеки в обработку колбека "ChatMessages" // var listChatIds = _dataSourceChat.GetListModelChatByIdMessage(entityIds); // ChangedListModelChat(listChatIds, new List<ModelChat>()); //} /// <summary> Обработчик изменения списка чатов внутри логики C++ </summary> private void ChangedListModelChat(List <ModelChat> listChangedModelChat, List <ModelChat> listDeletedModelChat) { var listModelChatCurrent = CurrentListModelChat.ToList(); // удаление foreach (var i in listDeletedModelChat) { listModelChatCurrent.Remove(listModelChatCurrent.FirstOrDefault(obj => obj.Id == i.Id)); } Action action = () => { // добавление и обновление foreach (var i in listChangedModelChat) { var modelChat = listModelChatCurrent.FirstOrDefault(obj => obj.Id == i.Id); if (modelChat != null) { // изменение (пошел через переприсвоение свойств, а не через удалить и добавить заново, что бы не слетало выделение) modelChat.ListModelContact = ListModelContactSort(i.ListModelContact); modelChat.Active = i.Active; modelChat.LastMessage = i.LastMessage; modelChat.LastModifiedDate = i.LastModifiedDate; modelChat.NewMessagesCount = i.NewMessagesCount; modelChat.Title = i.Title;// LocalizationApp.GetInstance().GetValueByKey(@"ModelChatMessage_Untitled"); modelChat.TotalMessagesCount = i.TotalMessagesCount; } else { listModelChatCurrent.Add(i); } } CurrentListModelChat = new ObservableCollection <ModelChat>(SortCurrentListModelChat(listModelChatCurrent)); DataSourceChat.RefreshModelContactChatStatus(CurrentListModelChat.ToList()); }; CurrentDispatcher.BeginInvoke(action); }
/// <summary> Обработчик изменения статусов контактов </summary> private void OnListModelContactStatusChanged(object sender, List <PackageModelContactStatus> packageModelContactStatuses) { Action action = () => DataSourceChat.RefreshModelContactChatStatus(CurrentListModelChat.ToList()); CurrentDispatcher.BeginInvoke(action); }