ListPicker SelectedIndex Not Shown Correctly in WP7

橙三吉。 提交于 2019-12-11 12:14:06

问题


I have a strange problem with the ListPicker element in WP7.

The Problem

Setting a ListPicker's SelectedIndex via a Binding doesn't change the default item shown after it loads.

Example

As a test, I've quickly modified Microsoft's SettingsSample to include a ListPicker. You can download it at: http://www.mediafire.com/?w0n0ymkh4dwe9b3

This is our collapsed ListPicker:

 -----------------
| Times New Roman |
 -----------------

And this is ListPicker when it's expanded:

 -----------------
| Times New Roman |
| Arial           |
| Comic Sans MS   |
 -----------------

If we select 'Arial', navigate away, then come back again, the ListPicker still shows:

 -----------------
| Times New Roman |
 -----------------

Whereas it ought to show (because the settings are saved correctly):

 -----------------
| Arial           |
 -----------------

Further Confusion

In the above example, if we click on the ListPicker, 'Arial' is actually selected (because the text for this ListBoxItem is highlighted). For some reason, it's just not shown as the default value when the control is loaded.

If we forget about the Binding approach, and instead manually set SelectedIndex to '1' in XAML, then we get the expected result when the control is loaded:

 -----------------
| Arial           |
 -----------------

Ideas?

Is there a way to update the ListPicker control to show the SelectedIndex properly when using a Binding? I guess I'm missing something obvious, but I've searched and not been able to find anything.

Thanks in advance!


回答1:


I believe there is an outstanding bug with the ListPicker control to do with binding the selection. I think the recommended solution is to manually set a binding in the OnNavigatedTo override for the page. The following code shows how I do it for one of my apps:

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            Binding pickerBinding = new Binding("DistanceUnit")
            {
                Source = App.Current.Resources["Settings"],
                Mode = BindingMode.TwoWay
            };
            this._distanceUnit.SetBinding(ListPicker.SelectedItemProperty, pickerBinding);
        }

Alternatively, you can handle the Loaded event for the ListPicker itself and set the binding there. The previous approach is ideal if you have multiple pickers. The latter approach is more suited to the scenario when you just have a single picker.

NOTE: I haven't checked the latest source code for the Toolkit to see if this is still an outstanding bug.



来源:https://stackoverflow.com/questions/5801779/listpicker-selectedindex-not-shown-correctly-in-wp7

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!