从列表选取器中删除所选项目

本文关键字:选项 项目 删除 列表 选取 | 更新日期: 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。