none
Dúvidas em lista e listbox do windows phone silverlight RRS feed

  • Pergunta

  • Boa noite,

    Tenho o seguinte caso, tenho uma lista que vem do banco com n posições, quero agrupar de 5 em 5 em um listbox.

    Como fazer?

    terça-feira, 21 de abril de 2015 02:44

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

    terça-feira, 21 de abril de 2015 20:57
    Moderador

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

    terça-feira, 21 de abril de 2015 20:57
    Moderador
  • Como ficou o seu xaml?

    Quando eu chamei os itens ficaram com o objeto "TesteList.Movie"

    coloquei um ItemsSource="{Binding Name}" mas tbm nao deu certo

    quarta-feira, 22 de abril de 2015 22:37
  • <!--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>

    sexta-feira, 24 de abril de 2015 18:05
    Moderador