Изменить выбранный элемент ListBox в Windows Phone 7 - PullRequest
3 голосов
/ 12 июля 2011

Мне нужно выбрать элемент из списка, который содержит объекты моего класса.Вот мой код:

событие загрузки:

  private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
  {
      XDocument loadedData = XDocument.Load("file.xml");
      var data = from query in loadedData.Descendants("element")
                 select new myClass
                 {
                     First = (string)query.Element("first"),
                     Second = (string) query.Element("second")
                 };
      List<myClass> d = data.ToList<myClass>();
      myList = d; 
      myListBox.ItemsSource = data;            
  }

и затем моя кнопка, которая должна изменить выбранный элемент:

  private void button1_Click(object sender, RoutedEventArgs e)
  {
      myListBox.SelectedItem = myList[100];
  }

Я что-то делаюздесь не так?

Ответы [ 3 ]

1 голос
/ 13 июля 2011

myList - это не коллекция, которую вы привязали к списку.
Либо сделайте d более широкой областью видимости, и обратитесь к этому в button1_click
или
хранить data в myList, а не в его копии.

0 голосов
/ 12 июля 2011

Похоже, небольшая ошибка здесь. Я был в состоянии непостоянно повторить подобную проблему.

Я использовал стандартный шаблон VS для приложения с привязкой к данным. Шаблон поставляется с некоторыми примерами данных и заполненным списком. Я добавил кнопку, которая устанавливает выбранный элемент на 15-й элемент в коллекции. Это сработало, как и ожидалось. Однако, когда я прокрутил список до самого верха, он не вернется к 15-й записи, когда я нажму кнопку. Гадание здесь, с чем вы сталкиваетесь, является еще одним симптомом той же проблемы.

Чтобы решить эту проблему, я сначала устанавливаю SelectedIndex равным -1, что по существу отменяет выбор элемента.

private void button1_Click(object sender, RoutedEventArgs e)
{
    myListBox.SelectedIndex = -1;
    myListBox.SelectedItem = myList[100];
}

Мне любопытно, решит ли это и вашу проблему.

0 голосов
/ 12 июля 2011

Для эффективности я бы установил для ItemsSource значение «d», а не «data». Перечисление, возвращаемое запросом linq, является ленивым, поэтому оно оценивается каждый раз, когда обновляется пользовательский интерфейс. Массив, который у вас есть, создан с нетерпением, поэтому последующий поиск будет быстрым.

...