Tartar
Tartar

Reputation: 5452

Xamarin.Forms Picker Default Value

I have date picker and i am populating it dynamically via a web service.

<Picker x:Name="picker" Title="Select Something" ItemsSource="{Binding}" ItemDisplayBinding="{Binding Name}"></Picker>

I set the Title property as above but for UWP it shows up as a Label. How can i set it as a default value/prompt for UWP ?

Any help would be appreciated.

Upvotes: 3

Views: 5407

Answers (1)

Nico Zhu
Nico Zhu

Reputation: 32775

As Digitalsa1nt said, Picker don't have PlaceholderText property. However, you could add this property via custom renderer.

CustomPicker.cs

public class CustomPicker : Picker
{
    public static readonly BindableProperty PlaceHolderProperty = BindableProperty.Create(
propertyName: "PlaceHolder",
eturnType: typeof(string),
declaringType: typeof(CustomPicker),
defaultValue: default(string));

    public string PlaceHolder
    {
        get { return (string)GetValue(PlaceHolderProperty); }
        set { SetValue(PlaceHolderProperty, value); }
    }

}

Implement CustomPickerRenderer in your uwp client project.

CustomPickerRenderer.cs

[assembly: ExportRenderer(typeof(CustomPicker), typeof(CustomPickerRenderer))]

namespace XamarinPickerDefaultValueTest.UWP
{
    public class CustomPickerRenderer : PickerRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Picker> e)
        {
            base.OnElementChanged(e);
            var element = Element as CustomPicker;

            if (Control != null)
            {
                Control.PlaceholderText = element.PlaceHolder;
            }
        }

    }
}

Usage

<local:CustomPicker PlaceHolder="Picker something" x:Name="picker"/>

enter image description here

Upvotes: 2

Related Questions