Exemplo n.º 1
0
        ///// <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);
        }
Exemplo n.º 2
0
        /// <summary> Обработчик изменения статусов контактов </summary>
        private void OnListModelContactStatusChanged(object sender, List <PackageModelContactStatus> packageModelContactStatuses)
        {
            Action action = () => DataSourceChat.RefreshModelContactChatStatus(CurrentListModelChat.ToList());

            CurrentDispatcher.BeginInvoke(action);
        }