从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。我该怎么解决这个问题?
在您的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>