从LongListSelector项获取数据库对象

本文关键字:数据库 对象 获取 LongListSelector | 更新日期: 2023-09-27 18:25:03

我有一个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。我该怎么解决这个问题?

从LongListSelector项获取数据库对象

在您的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>