Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Как скрыть элементы в ListBox?


Автор: V0fka 14.4.2016, 15:26
Привет!

Есть ListBox, который биндится к ObservableCollection<T>. В типе Т имеется свойство P, которое содержит какой-то текст.
Есть TextBox, в который вводится какой-то текс.

Хочу сделать, чтобы по ходу ввода текста в TextBox, в ListBox-е скрывались элементы, которые в T.P не содержат введенного текста. На данном этапе не знаю, как в принципе можно скрыть какие-то элементы. Скажем, просто хочу скрыть 2 и 5 элемент.

Подскажите, пожалуйста, как такое сделать?

Автор: V0fka 18.4.2016, 10:53
Актуально

Автор: shmarov 6.7.2016, 10:24
Если нужно, чтобы видимость элементов менялась при вводе текста в текстбокс без потери им фокуса - нужно в Binding на него установить признак UpdateSourceTrigger=PropertyChanged
После в самом свойстве, которое биндится на текстбокс при обновлении значения внедрить логику, которая определяет видимость элементов коллекции. Например, как-то так (пример не из студии, могут быть ошибки):
Код

public string Text
{
   get { return _text; }
   set 
   {
      if (!_text.Equals(value))
      {
         _text = value;
         RaisePropertyChanged();
         RefreshCollection();
      }
   }
}

//Скрыть четные элементы коллекции, если введено четное количество символов
void RefreshCollection()
{
   _list.Where(p1 => _list.IndexOf(p1) % 2 == 0).ToList().Foreach(p1 => p1.Visible = Text.Length % 2 == 0);
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)