Usuário com melhor resposta
Alterando o SelectedItem de um ListPicker

Pergunta
-
Pessoal, depois de criar um template para exibir o listpicker, não é mais possível alterar o SelectedItem. Segue o cenário abaixo:
XAML
<toolkit:ListPicker x:Name="lstBancoConta" ExpansionMode="ExpansionAllowed"> <toolkit:ListPicker.ItemTemplate> <DataTemplate> <Grid> <StackPanel Orientation="Horizontal"> <Image x:Name="imgBancoContaLogo" Source="{Binding contaBancoLogoSource}" Width="40" Stretch="Uniform"></Image> <TextBlock Text="{Binding contaBancoNome}" Margin="10,0,0,0"/> </StackPanel> </Grid> </DataTemplate> </toolkit:ListPicker.ItemTemplate> <toolkit:ListPicker.FullModeItemTemplate> <DataTemplate> <Grid> <StackPanel Orientation="Horizontal"> <Image x:Name="imgBancoContaLogo" Source="{Binding contaBancoLogoSource}" Width="40" Stretch="Uniform"></Image> <TextBlock Text="{Binding contaBancoNome}" FontSize="36" FontFamily="{StaticResource PhoneFontFamilyLight}" Margin="10,0,0,0"/> </StackPanel> </Grid> </DataTemplate> </toolkit:ListPicker.FullModeItemTemplate> </toolkit:ListPicker>
Note que o ListPicker está preparado para exibir uma imagem e um texto, tanto na lista padrão quanto em FullMode (isto funciona).
C# para popular o ListPicker
this.lstBancoConta.ItemsSource = new ListaContaBancaria();
Classes utilizadas
public class ListaContaBancaria : List<clsListaContaBancariaBinding> { public ListaContaBancaria() { using (FingersOnFinanceContext ctx = new FingersOnFinanceContext(sConn)) { var query = from x in ctx.FOFkContas where x.CtaStatus == 1 orderby x.CtaBancoNome select x; foreach (var item in query) { Add(new clsListaContaBancariaBinding { contaCodigo = item.CtaCodigo, contaBancoNome = item.CtaBancoNome, contaBancoLogoArquivo = item.CtaBancoLogoSource, contaBancoLogoSource = wp_generic_tools.Image_IO.ImageLoad(item.CtaBancoLogoSource), }); } } } } public class clsListaContaBancariaBinding { public Int32 contaCodigo { get; set; } public String contaBancoNome { get; set; } public ImageSource contaBancoLogoSource { get; set; } public String contaBancoLogoArquivo { get; set; } }
Normalmente o código abaixo funcionaria, mas o valor não é mais válido para o SelectedItem desde que criei o template.
using (FingersOnFinanceContext ctx = new FingersOnFinanceContext(sConn)) { var registro = ctx.FOFkLancamentos.FirstOrDefault(l => l.LctNumero == intLancamentoNumero); if (registro != null) { // Carrega Conta Bancária se estiver habilitada e cadastrada if (booBancoConta) { if (registro.CtaCodigo != null) { this.lstBancoConta.SelectedItem = registro.FOFkConta.CtaBancoNome; } } // Carrega Categoria String strCategoriaDescricao = registro.FOFkCategoriaDespesa.CatDescricao; this.lstCategoria.SelectedItem = strCategoriaDescricao; } }
Obrigado!
Andrey Kurka (MCC) | Federal Case | @federalcaseinfo
domingo, 17 de fevereiro de 2013 02:43
Respostas
-
Acredito que haja uma solução melhor, mas como ninguém postou nada estes dias, preciso dar andamento ao projeto, então lá vai o jeito que consegui:
using (FingersOnFinanceContext ctx = new FingersOnFinanceContext(sConn)) { var registro = ctx.FOFkLancamentos.FirstOrDefault(l => l.LctNumero == intLancamentoNumero); if (registro != null) { // Carrega Conta Bancária se estiver habilitada e cadastrada if (booBancoConta) { if (registro.CtaCodigo != null) { var listaBancos = new ListaContaBancaria(); Int32 intIndex = -1; foreach (var item in listaBancos) { intIndex = intIndex + 1; if (item.contaCodigo == registro.CtaCodigo) { this.lstBancoConta.SelectedIndex = intIndex; break; } } } }
Vou marcar como resposta correta, mas se alguem tiver uma solução melhor, por favor poste aqui.
Andrey Kurka (MCC) | Federal Case | @federalcaseinfo
- Editado Andrey Gonçalves dos Santos segunda-feira, 4 de março de 2013 22:29
- Marcado como Resposta Andrey Gonçalves dos Santos segunda-feira, 4 de março de 2013 22:29
- Não Marcado como Resposta Andrey Gonçalves dos Santos segunda-feira, 4 de março de 2013 22:29
- Marcado como Resposta Felipo Gonçalves quarta-feira, 6 de março de 2013 13:09
segunda-feira, 4 de março de 2013 22:28
Todas as Respostas
-
Acredito que haja uma solução melhor, mas como ninguém postou nada estes dias, preciso dar andamento ao projeto, então lá vai o jeito que consegui:
using (FingersOnFinanceContext ctx = new FingersOnFinanceContext(sConn)) { var registro = ctx.FOFkLancamentos.FirstOrDefault(l => l.LctNumero == intLancamentoNumero); if (registro != null) { // Carrega Conta Bancária se estiver habilitada e cadastrada if (booBancoConta) { if (registro.CtaCodigo != null) { var listaBancos = new ListaContaBancaria(); Int32 intIndex = -1; foreach (var item in listaBancos) { intIndex = intIndex + 1; if (item.contaCodigo == registro.CtaCodigo) { this.lstBancoConta.SelectedIndex = intIndex; break; } } } }
Vou marcar como resposta correta, mas se alguem tiver uma solução melhor, por favor poste aqui.
Andrey Kurka (MCC) | Federal Case | @federalcaseinfo
- Editado Andrey Gonçalves dos Santos segunda-feira, 4 de março de 2013 22:29
- Marcado como Resposta Andrey Gonçalves dos Santos segunda-feira, 4 de março de 2013 22:29
- Não Marcado como Resposta Andrey Gonçalves dos Santos segunda-feira, 4 de março de 2013 22:29
- Marcado como Resposta Felipo Gonçalves quarta-feira, 6 de março de 2013 13:09
segunda-feira, 4 de março de 2013 22:28 -
Achar a solução sozinho também é uma forma de "marcar como resposta"! ;)
Caso mais alguem venha contribuir, analisamos novamente.
Bom trabalho Andrey!
Att,
Felipo Gonçalves
Microsoft Contingent Staffquarta-feira, 6 de março de 2013 13:10