1

sqlite データベースからこのようにリストビューにデータを入力します

private async void getBowlers()
{
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection(BOWLERS_DATABASE);

    var query = conn.Table<Bowler>();
    var result = await query.ToListAsync();

    List<String> names = new List<String>();

    foreach (var item in result)
    {
        names.Add(item.Name); 
    }

    itemListView.ItemsSource = names;
}

リスト内のアイテムの 1 つをクリックしたときに、クリックしたアイテムに関連付けられたデータを取得するにはどうすればよいですか?

リストに文字列のリストを入力しているだけなので、データをそれに関連付ける方法が本当にわからないので、リストビューにデータを入力する別の方法はありますか? を取得するだけでもID問題ないので、ID に基づいてクエリを実行できます

4

1 に答える 1

0

ListView文字列だけでなく、オブジェクトにバインドできます。そうすると、アイテムをクリックすると、オブジェクトが返されます。あなたの場合、オブジェクトにバインドできます。これにはandフィールドBowlerがあると想定しています。IDName

public class Bowler
{
    public int Id { get; set; }
    public string Name { get; set; }
}

XAML で、フィールドListViewをバインドすることを伝える必要がありNameます。これは、アイテムごとに単純なListViewものです。TextBlock

<ListView x:Name="itemListView" ItemsSource="{Binding}"  
 IsItemClickEnabled="True" ItemClick="itemListView_ItemClick">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}"></TextBlock>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

上記ではTextBlock、フィールドが表示されNameます。

アイテムをリストにロードするには、上記のメソッドを次のように変更できます。

// Unrelated, but generally you want to use "async Task" 
// in the method signature. "async void" should only be used by
// event handlers, such as a click event.
private async Task getBowlers()
{
    SQLiteAsyncConnection conn = new SQLiteAsyncConnection(BOWLERS_DATABASE);

    var query = conn.Table<Bowler>();
    var result = await query.ToListAsync();

    // set page's data context to bowler collection
    this.DataContext = result;
}

アイテムをクリックすると、関連するBowlerオブジェクトが返されます。

private void itemListView_ItemClick(object sender, ItemClickEventArgs e)
{
    Bowler bowler = (Bowler)e.ClickedItem;
    // do something with bowler...
}

詳細: Windows 8 Metro アプリ ListView のバインドと編集

于 2013-06-09T20:52:29.597 に答える