Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Xamarin Forms - Retornar valor selecionado de um Picker

Olá Pessoal,

Gostaria de saber como recuperar o item selecionado de um Picker em uma propriedade definida na minha ViewModel. O código da View esta assim:

 <Label FontAttributes="Bold" FontSize="Medium">Selecione a Origem:</Label>
            <Picker x:Name="PickerOrigem" 
                    Title="Origem" 
                    ItemDisplayBinding="{Binding  DsCidadeOrigem}" 
                    ItemsSource="{Binding ListaCidades}"
                    SelectedItem="{Binding DsCidadeOrigem}"/>

Classe no model:

public class CidadeDestino
    {
        public string DsCidadeDestino { get; set; }
        public string DsCidadeOrigem { get; set; }

    }

O "ItemSource" é alimentado por uma lista de objetos do tipo " CidadeDestino" e o "ItemDisplayBinding" exibe as propriedade DsCidadeOrigem, só que preciso retornar o item selecionado para minha minha ViewModel e não sei qual propriedade usar para fazer isso.

Desde já agradeço a quem puder ajudar.

Atenciosamente,

3 respostas
solução!

Olá, Wesley

Imagine que você tenha a seguinte ViewModel:

public class MinhaPaginaViewModel : INotifyPropertyChanged
{
    ....

    public ObservableCollection<CidadeDestino> ListaCidades {get; set;}

    ...
}

E então você define essa ViewModel como origem do binding na sua página:

public partial class MinhaPagina : ContentPage
{
    MinhaPaginaViewModel vm;

    public MinhaPagina()
    {
        InitializeComponent();
        this.BindingContext = vm = new MinhaPaginaViewModel();
    }
}

No controle Picker, coloque como SelectedItem: ListaCidadesSelectedIndex

<Picker x:Name="PickerOrigem" 
                    Title="Origem" 
                    ItemDisplayBinding="{Binding  DsCidadeOrigem}" 
                    ItemsSource="{Binding ListaCidades}"
                    SelectedItem="{Binding ListaCidadesSelectedIndex}"/>

Agora, no ViewModel, adicione a propriedade public CidadeDestino CidadeSelecionada { get; set;} e programe o get e o set para a propriedade ListaCidadesSelectedIndex. Note que no setter dessa propriedade é que descobrimos qual cidade foi selecionada e decidimos o que fazer com essa informação.

public class MinhaPaginaViewModel : INotifyPropertyChanged
{
    public CidadeDestino CidadeSelecionada { get; set;}

    int listaCidadesSelectedIndex;
    public int ListaCidadesSelectedIndex
    {
        get 
        {
            return ListaCidadesSelectedIndex;
        }
        set 
        {
            if(listaCidadesSelectedIndex != value)
            {
                listaCidadesSelectedIndex = value;

OnPropertyChanged(nameof(ListaCidadesSelectedIndex));
                CidadeSelecionada = ListaCidades[listaCidadesSelectedIndex];
            }
        }
    }
}

Professor, obrigado pela resposta, havia até ignorado essa parte do Picker momentaneamente, mas agora sei como pegar o resultado que preciso. Agradeço novamente.

Excelente, Wesley, fico feliz que tenha conseguido! Se tiver alguma dúvida ainda, nos avise. Bons estudos!