private void OnSelectedItemChanged(object oldValue, object newValue)
{
if (null == Items || Items.Count == 0)
{
if (null == Template)
{
// Can't set the value now; remember it for later
_deferredSelectedItem = newValue;
return;
}
}
// Validate new value
int newValueIndex = (null != newValue) ? Items.IndexOf(newValue) : -1;
if ((-1 == newValueIndex) && (0 < Items.Count))
{
newValueIndex = -1;
}
// Synchronize SelectedIndex property
if (!_updatingSelection)
{
_updatingSelection = true;
SelectedIndex = newValueIndex;
_updatingSelection = false;
}
// Switch to Normal mode or size for current item
if (ListPickerMode.Normal != ListPickerMode)
{
ListPickerMode = ListPickerMode.Normal;
}
else
{
SizeForAppropriateView(false);
}
// Fire SelectionChanged event
var handler = SelectionChanged;
if (null != handler)
{
IList removedItems = (null == oldValue) ? new object[0] : new object[] { oldValue };
IList addedItems = (null == newValue) ? new object[0] : new object[] { newValue };
handler(this, new SelectionChangedEventArgs(removedItems, addedItems));
}
if (this.SelectedItem != null && this.SelectedIndex >= 0)
{
List<object> list = new List<object>();
list.Add(this.SelectedItem);
this.UpdateSummary(list);
}
else
{
this.UpdateSummary(new List<object>());
}
}