none
Como adquirir todos os elementos de um listview? RRS feed

  • Pergunta

  •  

    Olá pessoal,

    Estou com um grande problema. Tenho procurar em alguns livros, sites, blogs e infelizmente não encontrei resposta para meu problema. Gostaria que alguém pudesse ajudar.

     

    Bom vamos ao problema...

     

    Tenho um arquivo XAML que contém um listview. Segue abaixo o seu código...

     

    <Window.Resources>

    <DataTemplate x:Key="Item">

    <TextBox Text="{Binding Item}" Width="35" HorizontalAlignment="Center"/>

    </DataTemplate>

    <DataTemplate x:Key="Alternativa">

    <TextBox Text="{Binding DescricaoAlternativa}" Width="445" HorizontalAlignment="Center"/>

    </DataTemplate>

    <DataTemplate x:Key="Imagem">

    <TextBlock Text="{Binding Imagem}" />

    </DataTemplate>

    <DataTemplate x:Key="Correta" >

    <CheckBox IsChecked="{Binding Correta}" HorizontalContentAlignment="Right" />

    </DataTemplate>

    </Window.Resources>

     

    Na visualização do arquivo, a janela fica assim:

     

    -------------------------------------------------------------------------------------------------------------------------------------------------------------

    Item1       |                           Item2                          |                           Item3                    |       Item4        |

    -------------------------------------------------------------------------------------------------------------------------------------------------------------

    TextBox   | TextBox                                                | TextBlock                                       | CheckBox        |

     

     

    -----------------

    |    ADD     |

    -----------------

     

     

    Como podem ver,cada coluna tem um controle especifico.

     

    Primaiera cooluna tem um textbox;

    Segunda Coluna tem um textbox;

    Terceira Coluna tem um textblock;

    Quarta coluna um checkBox.

     

     

    Crie uma classe alternativas onde guardará todas as alternativas inseridas pelo usuário:

     

    public class Alternativas: ObservableCollection<Alternativa>

    {

    #region Construtores

    public Alternativas()

    : base()

    {

    }

    #endregion

    }

     

     

    Há uma classe chamada alternativa que será uma linha inteira do listview. Ela é usada na classe Alternativas

     

    public class Alternativa

    {

    #region Campos

    private string item;

    private string descricaoAlternativa;

    private string imagem;

    private bool correta;

    private short linha;

    #endregion

    #region Contrutores

     

    public Alternativa()

    {

    inicializaItem();

    inicializaDescricaoAlternativa();

    inicializaImagem();

    inicializaCorreta();

    inicializaLinha();

    }

    #endregion

    #region Membros

    private void inicializaLinha()

    {

    linha = -1;

    }

     

    private void inicializaItem()

    {

    item = "item";

    }

     

    private void inicializaDescricaoAlternativa()

    {

    this.descricaoAlternativa = "Alternativa";

    }

     

    private void inicializaImagem()

    {

    imagem = " ...";

    }

     

    private void inicializaCorreta()

    {

    correta = true;

    }

    #endregion

    #region Propriedades

    public short Linha

    {

    get { return this.linha; }

    set { this.linha = value; }

    }

     

    public String Item

    {

    get { return this.item; }

    set { this.item = value; }

    }

     

    public String DescricaoAlternativa

    {

    get { return this.descricaoAlternativa; }

    set { this.descricaoAlternativa = value; }

    }

     

    public String Imagem

    {

    get { return this.imagem; }

    set { this.imagem = value; }

    }

     

    public bool Correta

    {

    get { return this.correta; }

    set { this.correta = value; }

    }

    #endregion

    }

     

    No code behind do listview, Eu criei um método de adicionar alternativa.

    Essse método adiciona apenas uma linha por vez quando o botão inseir é pressionado pelo usuário.

     

    private void bntAdd_Click(object sender, RoutedEventArgs e)

    {

    alternativas.Add(new Alternativa());

    listView.ItemsSource = alternativas;

    }

     

    Este código está funcionando....

     

    Agora vem o problema...

     

    Crie um método que LÊ todas as linhas do listview e obtém os valores dos controles...

    Quando o botão visualizar é clicado então o método de leitura é chamado.

     

    Por examplo: Veja a figura abaixo:

     

     

    -------------------------------------------------------------------------------------------------------------------------------------------------------------

    Item       |                           Text                         |                           Image                    |       Right        |

    -------------------------------------------------------------------------------------------------------------------------------------------------------------

     A          |  It is a dog                                          | |Insert Path Image| ...                        | true                |

     B          |  It is a Cat                                          | |Insert Path Image| C:\Cat                  | false               |

     C          |  It is a Horse                                      | |Insert Path Image| ...                         | false               |

     

    -----------------

    |   Inserir    |

    ----------------- 

    ----------------------

    |   Visualizar   |

    ----------------------

     

    O que estou querendo fazer é: quando o usuário clicar em visualizar, é então feito uma varredura em toda a listview e vai exibindo linha por linha, ou seja entra na linha, percorre coluna a coluna e lê o valor do controle e exibe na tela.

     

    Então ao ler a primeira linha ele mostrará  A, It is a dog, Insert Path Image, true...

     

    Bom pessoal, agradeço desde já pela ajuda. Por favor se puder me ajudar fornecendo um tutorial, exemplo aqui   ja agradeço.

     

     

    Abraços

     

    sexta-feira, 14 de março de 2008 18:34

Respostas