In questa piccola guida pratica verifico come popolare un ListView usando un ItemTemplate da un ipotetico JSON e la sua successiva iterazione fra gli elementi. E' stato realizzato in C# per Windows Phone 8.1 .
In primis dichiariamo la ListView ed il relativo ItemTemplate nello XALM della Page.
<ListView Grid.Row="1" Grid.ColumnSpan="2" x:Name="lvSpese" SelectionChanged="lvSpese_SelectionChanged" SelectionMode="Single"> <ListView.ItemTemplate> <DataTemplate> <Grid Margin="2,0" Width="399"> <Grid.ColumnDefinitions> <ColumnDefinition Width="1*" /> <ColumnDefinition Width="2*" /> <ColumnDefinition Width="2*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="1*" /> <RowDefinition Height="1*" /> </Grid.RowDefinitions> <TextBlock Grid.Column="0" Grid.RowSpan="2" Text="{Binding Importo}" Foreground="{Binding ImportoColor}" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20"/> <TextBlock Grid.Column="1" Grid.Row="0" Text="{Binding Movimento}" VerticalAlignment="Center"/> <TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding Conto}" VerticalAlignment="Center" /> <TextBlock Grid.Column="2" Grid.Row="0" Text="{Binding Id}" VerticalAlignment="Center"/> <TextBlock Grid.Column="2" Grid.Row="1" Text="{Binding Data}" VerticalAlignment="Center" /> </Grid> </DataTemplate> </ListView.ItemTemplate> <ListView.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel> <VirtualizingStackPanel.ChildrenTransitions> <TransitionCollection> <ContentThemeTransition /> </TransitionCollection> </VirtualizingStackPanel.ChildrenTransitions> </VirtualizingStackPanel> </ItemsPanelTemplate> </ListView.ItemsPanel> <x:String>One</x:String> </ListView>
Nel cs dichiariamo la classe di appoggio per il binding dell'ItemTemplate
public class LvItemTemplate
{
public string Importo { get; set; }
public string ImportoColor { get; set; }
public string Movimento { get; set; }
public string Id { get; set; }
public string Data { get; set; }
public string Conto { get; set; }
}
Supponiamo di popolare la ListView da un ipotetico Json o da qualsiasi altra sorgente
for (int i = 0; i < subArray.Count; i++) { JsonObject jsonAppObj = subArray[i].GetObject(); items.Add(new LvItemTemplate() { Data = jsonAppObj.GetNamedString("data_movimento"), Importo = jsonAppObj.GetNamedString("importo"), ImportoColor = Decimal.Parse(jsonAppObj.GetNamedString("importo")) > 0 ? "#8BC34A" : "#F44336", Conto = jsonAppObj.GetNamedString("conto"), Movimento = jsonAppObj.GetNamedString("movimento"), Id = jsonAppObj.GetNamedString("id") }); }
Adesso iteriamo, per esempio dai selezionati effettuando il cas alla classe del template per ottenere i valori dell'item selezionato.
for (int i = 0; i < lvSpese.SelectedItems.Count; i++) { var tmpItem = lvSpese.SelectedItems[i] as LvItemTemplate; var id = tmpItem.Id; }