none
Acessar informações de um textbox dentro de um Template Listbox RRS feed

  • Pergunta

  • Pessoal,

    No exemplo abaixo, tenho um ListBox que exibe informações de uma lista e, para cada item da lista, um textbox que deverá ser preenchido pelo usuário.

    Como consigo acessar a informação digitada pelo usuário neste textbox para gravar em meu banco de dados?

    Obrigado!

                        <ListBox x:Name="lstCheckpoints" Height="420" Margin="0,10,-5,0" SelectionChanged="lstCheckpoints_SelectionChanged">
                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Horizontal" Background="Black" Opacity="0.6" Width="432" Margin="0,0,0,10">
                                        <CheckBox x:Name="chkCheckpoint" IsChecked="{Binding checkStatus}" Click="chkCheckpoint_Click"></CheckBox>
                                        <StackPanel Margin="0,0,0,0">
                                            <TextBlock Text="{Binding checkDescricao}" TextWrapping="Wrap" Style="{StaticResource PhoneTextLargeStyle}"/>
                                            <StackPanel Orientation="Horizontal">
                                                <TextBlock Text="{Binding checkQuantidade}" Style="{StaticResource PhoneTextLargeStyle}"></TextBlock>
                                                <TextBlock Text="{Binding checkUnidadeMedidaAbreviacao}" Margin="5,0,0,0" Style="{StaticResource PhoneTextLargeStyle}"></TextBlock>
                                                <TextBlock x:Name="tblCheckMoeda" Text="R$" Margin="10,0,0,0" Style="{StaticResource PhoneTextLargeStyle}"></TextBlock>
                                                <TextBox x:Name="txtCheckValor" HorizontalContentAlignment="Right" Text="{Binding checkValor}" Margin="5,-8,0,0" FontSize="20" Width="120" Height="60"></TextBox>
                                            </StackPanel>
                                            
                                        </StackPanel>
                                        
                                    </StackPanel>
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListBox>


    Andrey Kurka (MCC) | Federal Case | @federalcaseinfo


    domingo, 4 de novembro de 2012 21:05

Todas as Respostas

  • Olá Andrey,

    Testei essa solução aqui e funcionou. Veja se é isso que você precisa.

    Adicione uma classe "Helper" contendo o seguinte método:

    public T FindDescendant<T>(DependencyObject obj) where T : DependencyObject
            {
                // Check if this object is the specified type
                if (obj is T)
                    return obj as T;
    
                // Check for children
                int childrenCount = VisualTreeHelper.GetChildrenCount(obj);
                if (childrenCount < 1)
                    return null;
    
                // First check all the children
                for (int i = 0; i < childrenCount; i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                    if (child is T)
                        return child as T;
                }
    
                // Then check the childrens children
                for (int i = 0; i < childrenCount; i++)
                {
                    DependencyObject child = FindDescendant<T>(VisualTreeHelper.GetChild(obj, i));
                    if (child != null && child is T)
                        return child as T;
                }
    
                return null;
            }

    Para recuperar o valor do TextBox, seja em qualquer trigger definido por voce :

    var itemSelecionado = this.listBox1.ItemContainerGenerator.ContainerFromIndex(listBox1.SelectedIndex) as ListBoxItem;
    
    TextBox textBox = new HelperClass().FindDescendant<TextBox>(itemSelecionado);
    
    string texto = textBox.Text;

    []´s !


    Thiago Grandesso


    segunda-feira, 5 de novembro de 2012 18:45
  • Thiago, obrigado pelo retorno!

    Estou voltando de um cliente e não vou conseguir testar hoje, mas amanhã faço isso e digo o que aconteceu.

    Obrigado!


    Andrey Kurka (MCC) | Federal Case | @federalcaseinfo

    terça-feira, 6 de novembro de 2012 01:23
  • Sem problemas Andrey.

    Essa solução funcionou para você ?

    Aguardo seu retorno !


    Thiago Grandesso

    terça-feira, 13 de novembro de 2012 11:20
  • Boa Tarde Andrey.

    Passei por uma situação similar.

    resolvi da seguinte forma :

    string sPN = (((Model.ParceirosNegocios)lpParceiros.SelectedItem).RazaoSocial);

    Model.ParceirosNegocios = Minha classe;

    Espero ter ajudado.


    Brian Souza - MCP Desenvolvedor C#.Net

    segunda-feira, 19 de novembro de 2012 17:14
  • Brian, acho que houve um engano. O textbox está dentro de um listbox. Seria como utilizar o FindControl no .Net

    Só não testei a solução do Thiago porque estou fora resolvendo algumas coisas urgentes no cliente, mas a sua solução pega uma informação com base em uma classe previamente preenchida, mas não pega o texto digitado no textbox dentro de um listbox, conforme detalhei na questão. Mesmo assim, obrigado.


    Andrey Kurka (MCC) | Federal Case | @federalcaseinfo

    segunda-feira, 19 de novembro de 2012 20:12