Я получил телефон приложение для Windows с ListPicker, связанным с ObservableCollection и выбранного элемента:Удаление выбранного элемента из ListPicker
<toolkit:ListPicker Header="Endgame condition" ItemsSource="{Binding Conditions}"
SelectedItem="{Binding SelectedCondition, Mode=TwoWay}" />
И в ViewModel:
public ObservableCollection<string> Conditions
{
get { return conditions; }
}
public string SelectedCondition
{
get { return selectedCondition; }
set
{
if (selectedCondition != value)
{
selectedCondition = value;
OnPropertyChanged("SelectedCondition");
}
}
}
Когда Я пытаюсь удалить выбранный элемент из списка в обработчике кнопок, я получаю InvalidOperationException (SelectedItem всегда должен быть установлен в действительное значение):
public void ConfirmCondition()
{
var selected = selectedCondition;
SelectedCondition = null;
// throws an exception: SelectedItem must always be set to a valid value
conditions.Remove(selected);
}
Я надеялся, что установка SelectedCondition на null (которая на самом деле является первым элементом в списке), исправит его, но это не так. Похоже, что NotifyPropertyChanged в SelectedCondition (привязанный к элементу SelectedPicker ListItem с режимом привязки TwoWay) не обновляет SelectedItem до того, как Remove инициирует уведомление CollectionChanged для ItemsSource.
Любые идеи, как я могу удалить элемент, не получая исключения?
Что это за «Исключение», о котором вы только что упоминаете в своем последнем предложении? – Sheridan
@Sheridan: Я выяснил проблему. Это было InvalidOperationException (см. Комментарий в коде). –