Usuário com melhor resposta
Dúvidas em lista e listbox do windows phone silverlight

Pergunta
-
Respostas
-
Olá Felix,
Em se tratando do “Listbox” eu não conheço nenhuma propriedade que controle o número de item que serão exibidos.
Talvez existam outras alternativas mais eficientes, mas você pode tentar controlar esta lista no seu código usando por exemplo “CollectionViewSource.Filter”.
Usando o mesmo exemplo, eu criei uma lista com 20 itens, exibindo de 5 em 5, após apertar um botão “NEXT”.
Usei uma variável global (SessionPointer) para guardar o valo do último item listado assim saberia qual seriam os próximos itens da lista a serem exibidos.
No App.Xaml.cs
public partial class App : Application
{
public static int SessionPointer = 0;
.....
No MainPage.Xaml.cs
public MainPage()
{
InitializeComponent();
FillListBox();
}
private void FillListBox()
{
var myMovies = new MovieList();
var cvs = new CollectionViewSource();
cvs.Source = myMovies;
cvs.Filter += new FilterEventHandler(ShowOnlyBargainsFilter);
listBox1.ItemsSource = cvs.View;
}
private void ShowOnlyBargainsFilter(object sender, FilterEventArgs e)
{
var clollection = (CollectionViewSource)sender;
var myMovies = clollection.Source as MovieList;
var index = myMovies.IndexOf((Movie)e.Item);
if (myMovies.IndexOf((Movie)e.Item) >= App.SessionPointer &&
myMovies.IndexOf((Movie)e.Item) < (App.SessionPointer + 5)) {
e.Accepted = true;
}
else {
e.Accepted = false;
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
App.SessionPointer = App.SessionPointer + 5;
FillListBox();
}
A minha classe the “Movie”:
public class Movie
{
public string Actor { get; set; }
public string Name { get; set; }
}
public class MovieList : List<Movie>
{
public MovieList()
{
Add(new Movie { Name = "Name 1", Actor = "Actor 1", });
Add(new Movie { Name = "Name 2", Actor = "Actor 2", });
Add(new Movie { Name = "Name 3", Actor = "Actor 3", });
Add(new Movie { Name = "Name 4", Actor = "Actor 4", });
Add(new Movie { Name = "Name 5", Actor = "Actor 5", });
Add(new Movie { Name = "Name 6", Actor = "Actor 6", });
Add(new Movie { Name = "Name 7", Actor = "Actor 7", });
Add(new Movie { Name = "Name 8", Actor = "Actor 8", });
Add(new Movie { Name = "Name 9", Actor = "Actor 9", });
Add(new Movie { Name = "Name 10", Actor = "Actor 10", });
Add(new Movie { Name = "Name 11", Actor = "Actor 11", });
Add(new Movie { Name = "Name 12", Actor = "Actor 12", });
Add(new Movie { Name = "Name 13", Actor = "Actor 13", });
Add(new Movie { Name = "Name 14", Actor = "Actor 14", });
Add(new Movie { Name = "Name 15", Actor = "Actor 15", });
Add(new Movie { Name = "Name 16", Actor = "Actor 16", });
Add(new Movie { Name = "Name 17", Actor = "Actor 17", });
Add(new Movie { Name = "Name 18", Actor = "Actor 18", });
Add(new Movie { Name = "Name 19", Actor = "Actor 19", });
Add(new Movie { Name = "Name 20", Actor = "Actor 20", });
}
}
Espero ter ajudado
Veiga
- Sugerido como Resposta Eduardo.RomeroModerator quarta-feira, 22 de abril de 2015 12:09
- Marcado como Resposta Eduardo.RomeroModerator quarta-feira, 22 de abril de 2015 12:09
Todas as Respostas
-
Olá Felix,
Em se tratando do “Listbox” eu não conheço nenhuma propriedade que controle o número de item que serão exibidos.
Talvez existam outras alternativas mais eficientes, mas você pode tentar controlar esta lista no seu código usando por exemplo “CollectionViewSource.Filter”.
Usando o mesmo exemplo, eu criei uma lista com 20 itens, exibindo de 5 em 5, após apertar um botão “NEXT”.
Usei uma variável global (SessionPointer) para guardar o valo do último item listado assim saberia qual seriam os próximos itens da lista a serem exibidos.
No App.Xaml.cs
public partial class App : Application
{
public static int SessionPointer = 0;
.....
No MainPage.Xaml.cs
public MainPage()
{
InitializeComponent();
FillListBox();
}
private void FillListBox()
{
var myMovies = new MovieList();
var cvs = new CollectionViewSource();
cvs.Source = myMovies;
cvs.Filter += new FilterEventHandler(ShowOnlyBargainsFilter);
listBox1.ItemsSource = cvs.View;
}
private void ShowOnlyBargainsFilter(object sender, FilterEventArgs e)
{
var clollection = (CollectionViewSource)sender;
var myMovies = clollection.Source as MovieList;
var index = myMovies.IndexOf((Movie)e.Item);
if (myMovies.IndexOf((Movie)e.Item) >= App.SessionPointer &&
myMovies.IndexOf((Movie)e.Item) < (App.SessionPointer + 5)) {
e.Accepted = true;
}
else {
e.Accepted = false;
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
App.SessionPointer = App.SessionPointer + 5;
FillListBox();
}
A minha classe the “Movie”:
public class Movie
{
public string Actor { get; set; }
public string Name { get; set; }
}
public class MovieList : List<Movie>
{
public MovieList()
{
Add(new Movie { Name = "Name 1", Actor = "Actor 1", });
Add(new Movie { Name = "Name 2", Actor = "Actor 2", });
Add(new Movie { Name = "Name 3", Actor = "Actor 3", });
Add(new Movie { Name = "Name 4", Actor = "Actor 4", });
Add(new Movie { Name = "Name 5", Actor = "Actor 5", });
Add(new Movie { Name = "Name 6", Actor = "Actor 6", });
Add(new Movie { Name = "Name 7", Actor = "Actor 7", });
Add(new Movie { Name = "Name 8", Actor = "Actor 8", });
Add(new Movie { Name = "Name 9", Actor = "Actor 9", });
Add(new Movie { Name = "Name 10", Actor = "Actor 10", });
Add(new Movie { Name = "Name 11", Actor = "Actor 11", });
Add(new Movie { Name = "Name 12", Actor = "Actor 12", });
Add(new Movie { Name = "Name 13", Actor = "Actor 13", });
Add(new Movie { Name = "Name 14", Actor = "Actor 14", });
Add(new Movie { Name = "Name 15", Actor = "Actor 15", });
Add(new Movie { Name = "Name 16", Actor = "Actor 16", });
Add(new Movie { Name = "Name 17", Actor = "Actor 17", });
Add(new Movie { Name = "Name 18", Actor = "Actor 18", });
Add(new Movie { Name = "Name 19", Actor = "Actor 19", });
Add(new Movie { Name = "Name 20", Actor = "Actor 20", });
}
}
Espero ter ajudado
Veiga
- Sugerido como Resposta Eduardo.RomeroModerator quarta-feira, 22 de abril de 2015 12:09
- Marcado como Resposta Eduardo.RomeroModerator quarta-feira, 22 de abril de 2015 12:09
-
-
<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<ListBox Height="596" Name="listBox1" Width="380" >
<ListBox.ItemTemplate>
<DataTemplate >
<StackPanel Orientation="Horizontal" >
<TextBlock Text="{Binding Path=Name}"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Content="Next" HorizontalAlignment="Left" Margin="119,438,0,0" VerticalAlignment="Top" Click="Button_Click"/>
</Grid>