public override DataTemplate SelectTemplate(object item, DependencyObject container) { FrameworkElement element = container as FrameworkElement; if (element != null && item != null && item is DialogItemViewModel) { DialogItemViewModel dialog = item as DialogItemViewModel; if (dialog.GroupPhoto100 != null) { return(element.FindResource("Group") as DataTemplate); } if (dialog.ChatActive == null || dialog.UserCount == null) { return(element.FindResource("One") as DataTemplate); } if (dialog.ChatActive.Count == 2) { return(element.FindResource("Two") as DataTemplate); } if (dialog.ChatActive.Count == 3) { return(element.FindResource("Three") as DataTemplate); } if (dialog.ChatActive.Count >= 4) { return(element.FindResource("Four") as DataTemplate); } } return(null); }
/// <summary> /// возвращает список диалогов /// </summary> /// <returns></returns> public async Task <ObservableCollection <DialogItemViewModel> > GetDialog() { _dialogModel = await _vkApi.Messages.GetDialogsAsync(_count, _index); ObservableCollection <DialogItemViewModel> itemsDialog = new ObservableCollection <DialogItemViewModel>(); foreach (var item in _dialogModel.response.items) { DialogItemViewModel itemDialog = new DialogItemViewModel() { Title = item.message.title, UserId = item.message.user_id, Body = item.message.body, GroupPhoto100 = item.message.photo_100, GroupPhoto200 = item.message.photo_200, GroupPhoto50 = item.message.photo_50, UserCount = item.message.users_count, ChatActive = item.message.chat_active, ReadState = item.message.read_state, Date = item.message.date, Out = item.message.@out, ChatId = item.message.chat_id, Attachment = item.message.attachments, Unread = item.unread }; itemsDialog.Add(itemDialog); } CountDialog = _dialogModel.response.count; if (users == null || thisUser == null) { //если несколько пользователей то берем их из ChatActive если 1 то userId //собираем все их id HashSet <int> userIdList = new HashSet <int>(); foreach (var item in itemsDialog) { if (item.UserCount == 1 || item.UserCount == null) { if (!userIdList.Contains(item.UserId)) { userIdList.Add(item.UserId); } } if (item.UserCount > 1) { foreach (var id in item.ChatActive) { if (!userIdList.Contains(id)) { userIdList.Add(id); } } } } string userIds = String.Join(",", userIdList); //получаем всю необходимую информацию о пользовалелях кто в диалогах users = await _vkApi.Users.GetPhotoAsync(userIds); thisUser = await _vkApi.Users.GetAsync(); } //здесь в зависимости от количества собеседников подгружаем фотки foreach (var item in itemsDialog) { //проверка что в сообщении есть вложения //определяем тип вложения и пишем его в сообщение if (item.Attachment != null) // если ли вложения? { switch (item.Attachment[0].type) { case "photo": item.Body = "Фотография"; break; case "audio": item.Body = "Аудиозапись"; break; case "gift": item.Body = "Подарок"; break; case "wall": item.Body = "Запись на стены"; break; case "video": item.Body = "Видеозапись"; break; case "sticker": item.Body = "Стикер"; break; case "doc": item.Body = "Документ"; break; case "link": item.Body = "Ссылка"; break; default: item.Body = item.Attachment[0].type; break; } } if (item.ChatActive == null || item.UserCount == null) { try { var userTemp = users.response.Find(i => i.id == item.UserId); item.UserOnePhoto = userTemp.photo_100; item.Title = userTemp.first_name + " " + userTemp.last_name; if (item.Out == 1) { item.UserIdPhoto = thisUser.response[0].photo_100; } } catch { } continue; } var user = users.response.Find(i => i.id == item.UserId); if (user != null) { item.UserIdPhoto = user.photo_100; item.LastMessageUserName = user.first_name + " " + user.last_name; } if (item.ChatActive.Count == 2) { item.UserOnePhoto = users.response.Find(i => i.id == item.ChatActive[0]).photo_100; item.UserTwoPhoto = users.response.Find(i => i.id == item.ChatActive[1]).photo_100; continue; } if (item.ChatActive.Count == 3) { item.UserOnePhoto = users.response.Find(i => i.id == item.ChatActive[0]).photo_100; item.UserTwoPhoto = users.response.Find(i => i.id == item.ChatActive[1]).photo_100; item.UserThreePhoto = users.response.Find(i => i.id == item.ChatActive[2]).photo_100; continue; } if (item.ChatActive.Count >= 4) { item.UserOnePhoto = users.response.Find(i => i.id == item.ChatActive[0]).photo_100; item.UserTwoPhoto = users.response.Find(i => i.id == item.ChatActive[1]).photo_100; item.UserThreePhoto = users.response.Find(i => i.id == item.ChatActive[2]).photo_100; item.UserFourPhoto = users.response.Find(i => i.id == item.ChatActive[3]).photo_100; } } if (_dialogsViewModel == null) { _dialogsViewModel = itemsDialog; } else { itemsDialog.ToList().ForEach(_dialogsViewModel.Add); } _index += _count; users = null; thisUser = null; return(_dialogsViewModel); }