Выберите элемент два или более раз

У меня есть Listbox с его DataContext. Когда я выбираю элемент, я не могу выбрать его снова. Это не проблема, когда объектов много, но иногда пост-сервис возвращает мне список только с одним элементом, и если пользователь выделит элемент и захочет выбрать его еще раз, он не сможет этого сделать. Кто знает как решить эту проблему

В любом случае, спасибо!


person otto.castillo    schedule 27.08.2012    source источник


Ответы (3)


Попробуйте это, это работает для меня .. :)

  public void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
  {
        ListBox listBox = sender as ListBox;

        if (listBox != null && listBox.SelectedItem != null)
        {
            // do work
        }

        listBox.SelectedIndex = -1;
  }
person Milan Aggarwal    schedule 28.08.2012
comment
Отлично. Пожалуйста, проголосуйте за / примите как ответ, если считаете это уместным. - person Milan Aggarwal; 28.08.2012

Как спросил Тьерри, почему вы хотите, чтобы пользователь снова выбрал один и тот же элемент?

Если это только один крайний случай, когда у вас есть один элемент, который заполняет поле списка, то я бы спросил, выбран ли по умолчанию один элемент (или первый элемент с несколькими возвращенными)? Если это так, попробуйте установить для свойства IsSynchronizedWithCurrentItem значение False в поле со списком. Не видя кода, трудно дать лучший ответ.

Если есть код, который запускается каждый раз, когда пользователь выбирает элемент, независимо от того, является ли он одним и тем же, у вас может возникнуть проблема с рабочим процессом. Вы можете посмотреть, сможете ли вы реорганизовать код в этой области, чтобы изменить рабочий процесс.

Если вы не можете изменить рабочий процесс при выборе элемента, даже если он один и тот же, вам может потребоваться сделать каждый элемент в поле списка кнопкой с измененным шаблоном элемента управления кнопки на шаблон текстового блока. Это позволит вам привязаться к свойству Command и точно знать, какой элемент был нажат пользователем.

person blandau    schedule 27.08.2012
comment
в WP7 использование ListBox в качестве списка навигационных ссылок является парадигмой, а не проблемой рабочего процесса. - person William Melani; 28.08.2012

Если вы используете ListBox для выполнения чего-то вроде навигации, имеет смысл предоставить пользователю возможность выбирать элемент более одного раза подряд. Вот как это сделать:

«Проблема» заключается просто в том, что ListBox уведомляет вас об изменениях, а выбор того же элемента не является изменением. Поэтому сделайте его недействительным в конце метода и проверьте свое недействительное состояние в начале.

public void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
   var lb = (ListBox)sender;
   if (lb.SelectedIndex == -1) return;

  //your selection logic here

   lb.SelectedIndex = -1;
}
person William Melani    schedule 28.08.2012