2016-11-10 4 views
0

Я использую listview для отображения номера контактов в форматах xamarin. При нажатии любой ячейки я хочу изменить содержимое только этой конкретной ячейки. Ниже мой код:Onclicking listview cell only изменение содержимого кликаемой ячейки формы xamarin

lst_view.ItemSelected += async (object sender, SelectedItemChangedEventArgs e) => 
     { 
      var con =(Contact)e.SelectedItem; 
      int index=contactList.IndexOf(con); 

      if (con.is_selected) 
      { 
       contactList[index].is_selected = false; 
       contactList[index].img = ""; 
      } 
      else{ 
       contactList[index].is_selected = true; 
       contactList[index].img = "selected_checkbox.jpeg"; 
      } 

      lst_view.ItemTemplate = new DataTemplate(typeof(ContactsItemCell)); 
     }; 

Он работает нормально, но в конце концов, я даю новую DataTemplate Thats щелкать клетки всего ListView перерисовывать и что раздражает опыт. Я просто хочу обновить эту ячейку, а не весь список. Кстати, при нажатии я меняю изображение этой ячейки путем привязки к valueconverter.

ответ

1

Из кода, который вы указали, существует гораздо более простой способ сделать это, не меняя ListView.ItemTemplate. Похоже, вы пытаетесь заставить SelectedItem в ListView изменить его состояние в состояние «Выбранное», в котором отображается изображение флажка.

Это должно быть сделано путем использования переопределения OnBindingContext в классе Xamarin.Forms.ViewCell. В этом переопределении вы можете получить доступ к BindingContext ViewCell, который является моделью отображаемой информации. Здесь вы должны проверить свойство «is_selected» и установить изображение в ListView.ViewCell на соответствующее изображение, сохраненное в приложении.

Чтобы изменения были обновлены в ItemSelected, вам нужно будет вызвать OnPropertyChanged для коллекции, к которой привязан ListView. То, как вы меняете модель SelectedItem, правильно, но вам нужно убедиться, что это происходит в исходном наборе данных. Вызов OnPropertyChanged заставит Xamarin.Forms обновить ViewCells из связанного источника.

Если вам нужно было отобразить совершенно разные ViewCells (а не только изменить выбранное изображение), вы не должны обновлять ItemTemplate из ListView в обработчике событий ItemSelected и не должны менять ItemTemplate когда-либо. Вы должны создать DataTemplateSelector. Вы можете предоставить DataTemplate на основе объекта модели, который будет отображаться.

Надеюсь, это поможет!

Раскрытие: Я работаю Xamarin/Microsoft

+0

Thanx, я сделал это через свойство изменилось вместо перерисовки. –

+0

Другой способ сделать это! Большой! – BrewMate

Смежные вопросы