none
Enviar um parâmetro no evento TAP RRS feed

  • Pergunta

  • Olá pessoal, estou com um problema bobo mas cruel...

    Quero que, ao clicar em um item de uma lista dinâmica, o usuário seja direcionado à uma outra página usando parametros retirados desta lista. Ex.: Lista dos usuários online. Ao clicar sobre um, abrir uma page com o perfil do usuário.

    Abaixo o XAML da página que exibe os usuários online:

    <ScrollViewer Margin="0,-20,0,0" Width="430">
                            <ListBox Name="lstDados" Height="450" Width="430">
                                <ListBox.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel Orientation="Horizontal" Margin="0,0,5,10">
                                            <Border BorderThickness="2" BorderBrush="#0165C7" Background="{Binding Bg, Mode=OneWay}"
                                                UseLayoutRounding="True" CornerRadius="3" Height="73">
                                                <Image Source="{Binding Imagem, Mode=OneWay}" Height="73" Width="73"
                                                   VerticalAlignment="Top"/>
                                            </Border>
                                            <StackPanel Width="360" Margin="0,0,0,0" VerticalAlignment="Top" Tap="Ver_perfil">
                                                <TextBlock Text="{Binding UserName, Mode=OneWay}" Margin="13,-5,0,0" 
                                                           FontSize="26" HorizontalAlignment="Left"/>
                                                
                                                <TextBlock Text="{Binding Status, Mode=OneWay}" FontSize="16"
                                                           TextWrapping="Wrap" Width="340" Margin="13,-5,0,0" 
                                                           HorizontalAlignment="Left"
                                                           />
    
                                            </StackPanel>
                                        </StackPanel>
                                    </DataTemplate>
                                </ListBox.ItemTemplate>
    
                            </ListBox>
    
                        </ScrollViewer>
    Quero que ao tocar (Tap) chame uma função que vá ao perfil deste usuário (passando um parâmetro para a função).

    sexta-feira, 27 de abril de 2012 00:12

Respostas

  • Amigo,

    não sei qual foi o objeto que colocou no datacontext para popular a lista, mas pegar o ID dela é tranquilo, crie um evento lstDados_SelectionChanged e coloca o seguinte código.

    private void lstDados_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                Dicionario dicionarioTemp = ((Dicionario)lstDados.SelectedValue);
            }
    Mude o objeto Dicionario para o objeto que vc usa para dar o bind na lista

    Pega o parametro e chama outra tela passando o parametro.

    Espero que isso te ajude.

    Att,

    Paulo

    • Marcado como Resposta GilvanDev sábado, 28 de abril de 2012 16:47
    sexta-feira, 27 de abril de 2012 12:21
  • Gilvan,

    No código que vc fez, basicamente a ideia é que no evento SelectionChanged vc recupere o objeto responsável por preencher as informações durante o Binding. Sendo assim, o seu membroTemp terá todas as informações do objeto.

    No entanto, pelo que vi do seu código, vc só está preenchendo as propriedades UserName, Imagem e Status, o Id não está sendo preencho em lugar nenhum. Mas se ele estivesse sendo preenchido, vc poderia pegar o valor da maneira que citou membroTempo.Id.

    []s


    Thiago J. Mônaco
    MVP Windows Phone Development
    MCP, MCAD, MCSD, MCDBA, MCTS, MCPD and MCT Professional
    Scrum Developer I and Professional Scrum Master
    http://www.windowsphonebrasil.net
    @thiagojmonaco

    • Marcado como Resposta GilvanDev sábado, 28 de abril de 2012 16:47
    sábado, 28 de abril de 2012 02:29
    Moderador

Todas as Respostas

  • Amigo,

    não sei qual foi o objeto que colocou no datacontext para popular a lista, mas pegar o ID dela é tranquilo, crie um evento lstDados_SelectionChanged e coloca o seguinte código.

    private void lstDados_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                Dicionario dicionarioTemp = ((Dicionario)lstDados.SelectedValue);
            }
    Mude o objeto Dicionario para o objeto que vc usa para dar o bind na lista

    Pega o parametro e chama outra tela passando o parametro.

    Espero que isso te ajude.

    Att,

    Paulo

    • Marcado como Resposta GilvanDev sábado, 28 de abril de 2012 16:47
    sexta-feira, 27 de abril de 2012 12:21
  • Então paulo,

    Abaixo segue a classe que utilizo para popular a lista:

    public class Membro
        {
            public string DisplayName { get; set; }
            public string UserName { get; set; }
            public string Id { get; set; }
            public string Status { get; set; }
            public string Imagem { get; set; }
        }
    

    Utilizo um WebClient para obter os dados de um XML online...

    public PanoramaPage1()
            {
                InitializeComponent();
    
                WebClient wc = new WebClient();
                wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
                wc.DownloadStringAsync(new Uri("http://teste.net/api.php?act=online"));
                
            }
    
    
    void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
            {
                if (e.Error != null) return;
    
                XDocument xdoc = XDocument.Parse(e.Result);
                List<Membro> lista = new List<Membro>();
                foreach (XElement item in xdoc.Elements("usuarios").Elements("usuario"))
                {
                    Membro conteudo = new Membro();                
                    conteudo.UserName = item.Element("displayname").Value;                    
                    conteudo.Imagem = item.Element("foto").Value;
                    conteudo.Status = item.Element("status").Value;
    
                    lista.Add(conteudo);
                }
    
                lstDados.Visibility = Visibility.Visible;
                lstDados.ItemsSource = lista.ToList();
                loadBarra.Visibility = System.Windows.Visibility.Collapsed;
            }
    
    
    Então a função ficaria assim?
    private void lstDados_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
       Membro membroTemp = ((Membro)lstDados.SelectedValue);
    }

    E no caso como eu pegaria o parametro Id, por exemplo? Seria membroTemp.Id ?

    sexta-feira, 27 de abril de 2012 23:19
  • Gilvan,

    No código que vc fez, basicamente a ideia é que no evento SelectionChanged vc recupere o objeto responsável por preencher as informações durante o Binding. Sendo assim, o seu membroTemp terá todas as informações do objeto.

    No entanto, pelo que vi do seu código, vc só está preenchendo as propriedades UserName, Imagem e Status, o Id não está sendo preencho em lugar nenhum. Mas se ele estivesse sendo preenchido, vc poderia pegar o valor da maneira que citou membroTempo.Id.

    []s


    Thiago J. Mônaco
    MVP Windows Phone Development
    MCP, MCAD, MCSD, MCDBA, MCTS, MCPD and MCT Professional
    Scrum Developer I and Professional Scrum Master
    http://www.windowsphonebrasil.net
    @thiagojmonaco

    • Marcado como Resposta GilvanDev sábado, 28 de abril de 2012 16:47
    sábado, 28 de abril de 2012 02:29
    Moderador