【发布时间】:2013-09-14 03:31:58
【问题描述】:
我有一个 Windows Phone 应用,其 ListPicker 绑定到 ObservableCollection 和一个选定项:
<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(实际上是列表中的第一项)可以修复它,但事实并非如此。似乎 SelectedCondition 上的 NotifyPropertyChanged(以 TwoWay 绑定模式绑定到 ListPicker 的 SelectedItem)在 Remove 触发 ItemsSource 的 CollectionChanged 通知之前不会更新 SelectedItem。
有什么想法可以在不出现异常的情况下删除该项目吗?
【问题讨论】:
-
你只在最后一句话中提到的
Exception是什么? -
@Sheridan:我已经澄清了这个问题。这是一个 InvalidOperationException(参见代码中的注释)。
标签: c# windows-phone-8 listpicker