Bug 51642 - [UWP] Picker doesnt show items in 2.3.4.184-pre1 - works in 2.3.3.180
Summary: [UWP] Picker doesnt show items in 2.3.4.184-pre1 - works in 2.3.3.180
Status: RESOLVED FIXED
Alias: None
Product: Forms
Classification: Xamarin
Component: Windows (show other bugs)
Version: 2.3.4
Hardware: PC Windows
: --- normal
Target Milestone: ---
Assignee: Bugzilla
URL:
: 51502 (view as bug list)
Depends on:
Blocks:
 
Reported: 2017-01-19 18:41 UTC by spoiltnr1
Modified: 2017-03-10 17:07 UTC (History)
8 users (show)

Tags: AC
Is this bug a regression?: ---
Last known good build:


Attachments
Bug 51642 - UWP Picker - deferred BindingContext initialization error (104.53 KB, application/x-zip-compressed)
2017-01-19 23:02 UTC, spoiltnr1
Details


Notice (2018-05-24): bugzilla.xamarin.com is now in read-only mode.

Please join us on Visual Studio Developer Community and in the Xamarin and Mono organizations on GitHub to continue tracking issues. Bugzilla will remain available for reference in read-only mode. We will continue to work on open Bugzilla bugs, copy them to the new locations as needed for follow-up, and add the new items under Related Links.

Our sincere thanks to everyone who has contributed on this bug tracker over the years. Thanks also for your understanding as we make these adjustments and improvements for the future.


Please create a new report on Developer Community or GitHub with your current version information, steps to reproduce, and relevant error messages or log files if you are hitting an issue that looks similar to this resolved bug and you do not yet see a matching new report.

Related Links:
Status:
RESOLVED FIXED

Description spoiltnr1 2017-01-19 18:41:16 UTC
On UWP:
If a Picker is bound with ItemsSource, no elements are displayed when clicking the picker-control. It seems the native control doesn't get the items to display.

In 2.3.3.180 it works as expected.

Example:

<Picker Title="Foo" ItemsSource="{Binding AnObservalbeStringCollection}"></Picker>

Doesn't work, but

<Picker Title="Foo">
    <Picker.Items>
      <x:String>1</x:String>
      <x:String>2</x:String>
    </Picker.Items>
</Picker>

works.
Comment 1 David Ortinau [MSFT] 2017-01-19 19:08:48 UTC
I'm not able to repro a problem with the example. My UWP project is working.

Did you implement a ToString? 

Please post a sample project or at least more context about AnObservableStringCollection.
Comment 2 spoiltnr1 2017-01-19 23:02:42 UTC
Created attachment 19408 [details]
Bug 51642 - UWP Picker - deferred BindingContext initialization error

I just found out that the error only occurs, if the BindingContext initialization is delayed some time (i.e. 1000ms) after the construction of the page.

In the sample project I attach, there is a bool-switch called "delayed" in the constructor of MainPage. Run it one time with false (all picker work), then with true (the second picker using ItemsSource doesnt work anymore).
Comment 3 David Ortinau [MSFT] 2017-01-20 17:24:08 UTC
I was able to confirm the delayed binding isn't updating bound picker.
Comment 4 Stephane Delcroix 2017-01-23 15:30:00 UTC
UWP picker never supported collection changed it seems
Comment 5 Stephane Delcroix 2017-01-27 09:27:25 UTC
see https://github.com/xamarin/Xamarin.Forms/pull/725
Comment 6 Samantha Houts [MSFT] 2017-02-15 18:56:38 UTC
*** Bug 51502 has been marked as a duplicate of this bug. ***
Comment 7 Samantha Houts [MSFT] 2017-02-23 18:37:35 UTC
Should be fixed in 2.3.4-pre3. Thank you!
Comment 8 Christian Schwarz 2017-03-10 10:25:27 UTC
It still doesn't work with the following code:

public class MainViewModel
{
	public ObservableCollection<string> Items { get; set; }

	public MainViewModel()
	{
		Items = new ObservableCollection<string>();

		Task.Delay(1000).ContinueWith(t =>
		{
			Device.BeginInvokeOnMainThread(() =>
			{
				Items.Add("Item 1");
				Items.Add("Item 2");
				Items.Add("Item 3");
			});
		});
	}
}

public partial class MainPage : ContentPage
{
	public MainPage()
	{
		InitializeComponent();

		BindingContext = new MainViewModel();
	}
}
Comment 9 spoiltnr1 2017-03-10 13:23:20 UTC
I confirm, modifiying an (ObservableCollection) ItemsSource doesn't trigger an update to the picker. Even setting ItemsSource to null and to a new value (inkl. OnPropertyChanged) doesn't trigger an update.

If in the previous sample Items was initialized with an collection like new[]{"Item 0"} only "Item 0" gets displayed.
Comment 10 spoiltnr1 2017-03-10 14:51:18 UTC
Seems like a *wrong dll* was packaged in the nuget-package (checked with dotpeek)!
Comment 11 Rui Marinho 2017-03-10 15:17:24 UTC
Sorry , should be on 2.3.4-pre4
Comment 12 Christian Schwarz 2017-03-10 17:07:04 UTC
Works fine with 2.3.4-pre4, thank you for the fast response.