0

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

4

1 回答 1

0

在您的 OnNavigatedTo 方法中,您有以下行

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

这意味着您添加的是字符串而不是Odgovori对象的实例。在您的示例中,resultOdgovori变量是一个列表,因此其中的每个项目都已经是 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>
于 2013-07-26T19:51:19.013 回答