Я обнаружил ту же проблему с моим приложением.Но я заметил, что это происходит, когда я удаляю все элементы списка, связанные с ListPicker в ViewModel.Поэтому нет необходимости связывать SelectedIndex с другим свойством, поскольку проблема зависит только от ограниченного списка.Вот мой код, который отлично работает для меня:
<toolkit:ListPicker x:Name="ListaCorsi"
SelectionChanged="ListaCorsi_SelectionChanged"
ItemsSource="{Binding ListaCorsiUser}"
SelectionMode="Single"
ItemTemplate="{StaticResource CorsiDataTemplate}"
ItemsPanel="{StaticResource ItemsPanelTemplateListaCorsi}"/>
Модель списка:
private ObservableCollection<Corsi> _listaCorsiUser;
public ObservableCollection<Corsi> ListaCorsiUser
{
get { return _listaCorsiUser; }
set
{
_listaCorsiUser = value;
OnPropertyChanged("ListaCorsiUser");
}
}
Обработчик для SelectionChanged:
void ListaCorsi_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (ListaCorsi.SelectedItem != null)
{
---
this.CorsoSelected = ListaCorsi.SelectedItem as Corsi;
}
}
Где Corsiэто тип класса списка.
Здесь шаблон ListPicker:
<DataTemplate x:Key="CorsiDataTemplate">
<Grid>
<Grid.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="#FF3523FF" Offset="0.25"/>
<GradientStop Color="Black" Offset="1"/>
<GradientStop Color="#FF3523FF" Offset="0.75"/>
</LinearGradientBrush>
</Grid.Background>
<TextBlock TextWrapping="Wrap" Text="{Binding NomeCorso}" FontSize="24" FontFamily="Freestyle Script" TextAlignment="Center"/>
</Grid>
</DataTemplate>
И, в конце концов, метод delete, который проверяет, является ли список, возвращаемый IsolatedStorage, пустым, если это так,Я поместил поддельный пустой элемент в список, связанный с ListPicker, чтобы не получать ошибку, упомянутую в этом посте.
if (this.CorsoSelected != null)
{
---
List<Corsi> corsi = new List<Corsi>(DBHelper.GetCorsiByUserId(PassaggioValori.UserId));
if (corsi.Count > 0)
{
this.ListaCorsiUser = new ObservableCollection<Corsi>(corsi);
}
else
{
this.ListaCorsiUser = new ObservableCollection<Corsi>(new List<Corsi>() { new Corsi()});
}
----
}
Странная вещь заключалась в том, что, если список был пуст, когда страницабыл загружен, ничего не происходит, вместо этого, когда я удалил последний элемент из списка, приложение вызвало исключение "SelectedItem всегда должен быть установлен в допустимое значение".Теперь проблема решена.