首页 文章

从ListPicker中删除所选项目

提问于
浏览
0

我有一个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(它与ListPicker的SelectedItem绑定,具有TwoWay绑定模式)在Remove触发ItemsSource的CollectionChanged通知之前不会更新SelectedItem .

任何想法我如何删除该项而不会得到例外?

2 回答

  • 1

    虽然根据您显示的代码我不能100%确定,但可能是因为“选定”项目实际上并不是“条件”集合的成员 .

    因为您使用单独的对象来跟踪选择了哪个集合,所以您需要在集合中找到等效项并将其删除 . (您不能首先从集合中删除不在集合中的项目 . 即使它们在屏幕上以相同的方式表示 . )

    尝试这样的事情 .

    foreach(var item in conditions)
    {
        if(item.Equals(selectedCondition))
        {
            conditions.Remove(item);
        }
    }
    

    (确保 Equals 能够正确地确定集合中的正确实例 . )

  • 0
    public ObservableCollection<string> Conditions
    {
        get { return conditions; }
        set { return contitions;
        OnPropertyChanged("SelectedCondition");
        }
    }
    
    public void ConfirmCondition()
    {
        if(SelectedCondition != null){
        conditions.Remove(SelectedCondition );
        }
    }
    

    工作? @Matt Lacey如果你添加项目,你删除项目,你不需要解析ObservableCollection .

相关问题