Usuário com melhor resposta
Enviar um parâmetro no evento TAP

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).
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
-
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
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
-
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 ?
-
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