在我的Windows Phone 8项目中,我使用的是SDK Toolkit中的ListPicker控件(v 4.2013.06.11)。
在我的标记中,我定义了ItemsSource以及用于呈现控件的2个模板:
<toolkit:ListPicker x:Name="StagesList" Margin="24" Grid.Row="2"
ItemsSource="{Binding Model.Stages}"
FullModeItemTemplate="{StaticResource stageItemTemplate}"
ItemTemplate="{StaticResource stageItemTemplate}">
</toolkit:ListPicker>
在代码隐藏中,我设置DataContext并预先选择当前选择(在OnNavigatedTo中)并记住当前选择(在NavigatedFrom中):
public SelectOrCreateStage()
{
InitializeComponent();
DataContext = App.ViewModel;
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
StagesList.SelectedItem = App.ViewModel.SelectedProduct.Stage;
}
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
App.ViewModel.SelectedProduct.Stage = (Stage)StagesList.SelectedItem;
}
当OnNavigatedFrom()执行时,当前选择正确记录在模型中。声明后
StagesList.SelectedItem = App.ViewModel.SelectedProduct.Stage;
在NavigatedTo中执行(在SelectionChanged事件处理程序中验证),正确设置了选择。 OnApplyTemplate引发第二个SelectionChanged事件,使SelectedIndex保持正确的值!但是,视觉上
为什么会这样?怎么可以避免?设置ListPicker并预先选择不属于ItemsSource中第一项的项目的正确方法是什么?