BTI-Doug
BTI-Doug

Reputation: 463

New Bindable Picker can't set default item from viewmodel

Trying to get the new bindable picker to work in Xamarin Forms version 2.3.4.270 with Visual Studio 2017.

I can get the view to load in a list from the view model so when you click the picker, it does show the list of items. I want to set a default item in the picker on screen load though and nothing I have tried is working.

View:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:BindablePickerTest"
             x:Class="BindablePickerTest.MainPage">
    <StackLayout>
        <Label Text="Welcome to Xamarin Forms!" 
           VerticalOptions="Center" 
           HorizontalOptions="Center" />
        <Picker Title="Test Picker" ItemsSource="{Binding Names}" SelectedItem="{Binding Name, Mode=TwoWay}" />
    </StackLayout>
</ContentPage>

View Code Behind: (the view model is in the code behind for simplicity)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace BindablePickerTest
{
    public partial class MainPage : ContentPage
    {
        MainPageViewModel vm;

        public MainPage()
        {
            InitializeComponent();
            this.BindingContext = vm = new MainPageViewModel();
        }

    }

    public class MainPageViewModel : INotifyPropertyChanged
    {

        List<string> names = new List<string>
        {
            "Doug",
            "Fred",
            "Steve",
            "Tom",
            "Victor"
        };
        public List<string> Names => names;
        public string Name = "Steve";

        public event PropertyChangedEventHandler PropertyChanged;
    }
}

When this runs, the picker is still empty - "Steve" is not selected. When clicking the picker, the list shows correctly and I can choose any name, but it will not set a default selection.

Any help is appreciated!

Upvotes: 0

Views: 861

Answers (1)

Sharada
Sharada

Reputation: 13601

Name is a field right now. For Binding to work - it needs to be converted to property.

public string Name => "Steve";

Upvotes: 1

Related Questions