从列表选取器中删除所选项目
本文关键字:选项 项目 删除 列表 选取 | 更新日期: 2023-09-27 18:30:51
我有一个Windows Phone应用程序,其中ListPicker绑定到ObservableCollection和选定项目:
<toolkit:ListPicker Header="Endgame condition" ItemsSource="{Binding Conditions}"
SelectedItem="{Binding SelectedCondition, Mode=TwoWay}" />
在视图模型中:
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(实际上是列表中的第一项)可以修复它,但它没有。在"删除"触发 ItemsSource 的"集合已更改"通知之前,选定条件(绑定到具有双向绑定模式的 ListPicker 的选定项)上的 NotifyPropertyChanged 似乎不会更新选定项。
任何想法如何删除该项目而不会出现异常?
虽然我不能根据您显示的代码 100% 确定,但可能是因为"选定"项实际上不是"条件"集合的成员。
由于你使用单独的对象来跟踪选择了哪个集合,因此需要在集合中找到等效项并将其删除。(您不能从集合中删除原本不在集合中的项目。即使它们在屏幕上以相同的方式表示。
尝试这样的事情。
foreach(var item in conditions)
{
if(item.Equals(selectedCondition))
{
conditions.Remove(item);
}
}
(确保Equals
能够正确确定集合中的正确实例。
public ObservableCollection<string> Conditions
{
get { return conditions; }
set { return contitions;
OnPropertyChanged("SelectedCondition");
}
}
public void ConfirmCondition()
{
if(SelectedCondition != null){
conditions.Remove(SelectedCondition );
}
}
工作?@Matt 莱西 如果您添加项目,就像删除项目一样,则不需要解析 ObservableCollection。