Sup*_*gel 1 silverlight silverlight-toolkit windows-phone-7
我对ListPickerWP7中的元素有一个奇怪的问题.
问题
通过a 设置ListPicker's' 不会更改加载后显示的默认项目.SelectedIndexBinding
例
作为测试,我很快就修改了微软SettingsSample以包含一个ListPicker.您可以在http://www.mediafire.com/?w0n0ymkh4dwe9b3下载
这是我们崩溃了ListPicker:
-----------------
| Times New Roman |
-----------------
Run Code Online (Sandbox Code Playgroud)
这就是ListPicker它扩展的时候:
-----------------
| Times New Roman |
| Arial |
| Comic Sans MS |
-----------------
Run Code Online (Sandbox Code Playgroud)
如果我们选择'Arial',导航,然后再回来,ListPicker仍然显示:
-----------------
| Times New Roman |
-----------------
Run Code Online (Sandbox Code Playgroud)
它应该显示(因为设置保存正确):
-----------------
| Arial |
-----------------
Run Code Online (Sandbox Code Playgroud)
进一步的混乱
在上面的例子中,如果我们单击ListPicker,实际上选择了'Arial'(因为ListBoxItem突出显示了该文本).由于某种原因,它只是在加载控件时没有显示为默认值.
如果我们忘记了这个Binding方法,而是SelectedIndex在XAML中手动设置为'1',那么我们会在加载控件时得到预期的结果:
-----------------
| Arial |
-----------------
Run Code Online (Sandbox Code Playgroud)
想法?
有没有办法更新ListPicker控件,以便在SelectedIndex使用时正确显示Binding?我想我错过了一些明显的东西,但我已经搜索过,但却找不到任何东西.
提前致谢!
我相信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);
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以处理ListPicker本身的Loaded事件并在那里设置绑定.如果您有多个选择器,以前的方法是理想的.当你只有一个选择器时,后一种方法更适合这种情况.
注意:我还没有检查Toolkit的最新源代码,看看这是否仍然是一个突出的bug.