2013-07-25 3 views
0

У меня есть LongListSelector, заполненный список, который содержит объекты из SQLite базы данных:Получение объекта базы данных из LongListSelector Пункт

 protected override async void OnNavigatedTo(NavigationEventArgs e) 
    { 
     SQLiteAsyncConnection conn = new SQLiteAsyncConnection(DB_PATH); 
     var query = conn.Table<Prasanja>().Where(x => x.id == 3); 
     var result = await query.ToListAsync(); 
     foreach (var item in result) 
     { 
      var query1 = conn.Table<Odgovori>() 
      .Where(y => y.Prasanja_id == item.id); 

      txtPrasanje.Text = item.Tekst; 
      var resultOdgovori = await query1.ToListAsync(); 

      foreach (var itemOdgovor in resultOdgovori) 
      { 
       Lista.Add(itemOdgovor.Odgovor.ToString()); 
       lstOdgovori.ItemsSource = Lista; 
      } 
     } 

То, что я хочу, когда один из элементов LongListSelector сливают, что я получаю конкретный объект прослушивается, и иметь возможность использовать этот объект properties.Here мой код:

 private void lstOdgovori_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     LongListSelector selector = sender as LongListSelector; 
     if (selector == null) 
      return; 

     Odgovori odg = selector.SelectedItem as Odgovori; 
     if (odg == null) 
      return; 

     if(odg.Tocno==null) 
     MessageBox.Show("Try again"); 
     else MessageBox.Show("True!!!"); 
    } 

проблема здесь состоит в том, что мой объект КГДА из класса Odgovori возвращает null после выполнения этого кода. Как я могу это исправить?

+0

первая проверка Чет значение присутствует в выбранном элементе, применяя точку останова на линии .. ** Odgovori КГД = селектор .SelectedItem как Odgovori; ** если thr - это значение, то проблема связана с несоответствием типа. – loop

+0

Да, значение присутствует. Моя проблема в том, что объект ** odg ** из класса ** Odgovori ** возвращает null после выполнения этой строки. Как я могу правильно нарисовать объект SelectedItem как объект Odgovori? Odgovori - мой класс таблицы SQLite. –

ответ

0

В вашем методе OnNavigatedTo вы имеете следующую строку

Lista.Add(itemOdgovor.Odgovor.ToString()); 

Это означает, что вы добавляете строку, а не экземпляр Odgovori объекта. Из вашего примера переменная resultOdgovori является списком, поэтому каждый элемент в нем уже имеет тип Odgovori. Вы должны изменить свой код следующим образом.

lstOdgovori.ItemsSource = await query1.ToListAsync(); 

Это будет заполнять LongListSelector коллекцией объектов Одговори. Когда вы сделаете это, вы должны изменить свой ItemTemplate из LongListSelector так, что он будет отображать значения правильно

<phone:LongListSelector> 
    <phone:LongListSelector.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Odgovor}" /> 
     </DataTemplate> 
    </phone:LongListSelector.ItemTemplate> 
</phone:LongListSelector> 
Смежные вопросы