在WP7中未正确显示ListPicker SelectedIndex

时间:2011-04-27 09:13:04

标签: silverlight windows-phone-7 silverlight-toolkit

我对WP7中的ListPicker元素有一个奇怪的问题。

问题

通过ListPicker设置SelectedIndex的{​​{1}}不会更改加载后显示的默认项目。

示例

作为测试,我很快修改了Microsoft的Binding以包含SettingsSample。您可以在http://www.mediafire.com/?w0n0ymkh4dwe9b3

下载

这是我们已折叠的ListPicker

ListPicker

这是 ----------------- | Times New Roman | ----------------- ,当它被扩展时:

ListPicker

如果我们选择“Arial”,请离开,然后再次返回, ----------------- | Times New Roman | | Arial | | Comic Sans MS | ----------------- 仍会显示:

ListPicker

它应该显示(因为设置保存正确):

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

进一步混乱

在上面的示例中,如果我们点击 ----------------- | Arial | ----------------- ,实际上会选择“Arial”(因为此ListPicker的文字会突出显示)。出于某种原因,它只是在加载控件时没有显示为默认值。

如果我们忘记ListBoxItem方法,而是在XAML中手动将Binding设置为'1',那么我们会在加载控件时得到预期的结果:

SelectedIndex

思想吗

使用 ----------------- | Arial | ----------------- 时,有没有办法更新ListPicker控件以正确显示SelectedIndex?我想我错过了一些明显的东西,但我已经搜索过,但却找不到任何东西。

提前致谢!

1 个答案:

答案 0 :(得分:6)

我相信ListPicker控件存在一个突出的错误,可以绑定选择。我认为推荐的解决方案是在页面的OnNavigatedTo覆盖中手动设置绑定。以下代码显示了我如何为我的某个应用程序执行此操作:

        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);
        }

或者,您可以处理ListPicker本身的已加载事件,并在那里设置绑定。如果您有多个选择器,以前的方法是理想的。当你只有一个选择器时,后一种方法更适合这种情况。

注意:我没有检查Toolkit的最新源代码,看看这是否仍然是一个突出的错误。

相关问题