从LongListSelector项获取数据库对象

时间:2013-07-25 23:57:03

标签: c# sqlite windows-phone-8 longlistselector

我有一个LongListSelector,用List填充,其中包含来自SQLite数据库的对象:

     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项时,我获取了特定对象,并且能够使用该对象属性。这是我的代码:

       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 类中,我的对象 odg 在执行此代码后返回null。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

在OnNavigatedTo方法中,您有以下行

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

这意味着您要添加字符串而不是Odgovori对象的实例。在您的示例中,resultOdgovori变量是一个List,因此其中的每个项目都已经是Odgovori类型。您应该将代码修改为如下。

lstOdgovori.ItemsSource = await query1.ToListAsync();

这将使用Odgovori对象的集合填充LongListSelector。执行此操作时,您需要修改LongListSelector的ItemTemplate,以便它正确显示值

<phone:LongListSelector>
    <phone:LongListSelector.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Odgovor}" />
        </DataTemplate>
    </phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>