protected override void OnItemsChanged(NotifyCollectionChangedEventArgs e)
{
base.OnItemsChanged(e);
if ((0 < Items.Count) && (null == SelectedItem))
{
// Nothing selected (and no pending Binding); select the first item
if ((null == GetBindingExpression(SelectedIndexProperty)) &&
(null == GetBindingExpression(SelectedItemProperty)))
{
SelectedIndex = -1;
}
}
else if (0 == Items.Count)
{
// No items; select nothing
SelectedIndex = -1;
ListPickerMode = ListPickerMode.Normal;
}
else if (Items.Count <= SelectedIndex)
{
// Selected item no longer present; select the last item
SelectedIndex = Items.Count - 1;
}
else
{
// Re-synchronize SelectedIndex with SelectedItem if necessary
if (SelectedIndex != -1 && !object.Equals(Items[SelectedIndex], SelectedItem))
{
int selectedItemIndex = Items.IndexOf(SelectedItem);
if (-1 == selectedItemIndex)
{
SelectedItem = Items[0];
}
else
{
SelectedIndex = selectedItemIndex;
}
}
}
// Translate it into view once layout has been updated for the added/removed item(s)
Dispatcher.BeginInvoke(() => SizeForAppropriateView(false));
}