2013-06-09 7 views
1

я заполнить мой ListView, как это из моей базы данных SQLiteполучать данные из ListView

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; 
} 

, когда я нажимаю на одном из пунктов в списке, как я могу получить данные, связанные с щелкнули товар?

Поскольку я просто заполняю список списком строк, я действительно не вижу, как я могу связать любые данные с ним, так есть ли другой способ заполнить мой список? Даже просто получить ID было бы хорошо, тогда я мог просто запросить на основе ID

ответ

0

Вы можете связать свой ListView с объектом, а не просто с строкой. Если вы это сделаете, когда элемент будет нажат, вы вернете объект. В вашем случае, вы можете привязать к Bowler объекту, который я предполагаю, имеет ID и Name поле:

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 App ListView Binding and Editing

Смежные вопросы