当前位置: 首页 > 知识库问答 >
问题:

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

郭单鹗
2023-03-14

我有一个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);
}

我希望将SseltedCon条件设置为null(这实际上是列表中的第一个项目)会修复它,但它没有。在删除触发ItemsSource的集合更改通知之前,SseltedCon条件上的NotifyProperty tyChanged(通过双向绑定模式绑定到ListPicker的SseltedItem)似乎没有更新SseltedItem。

有没有办法在不出现异常的情况下删除该项目?

共有2个答案

傅胡媚
2023-03-14
public ObservableCollection<string> Conditions
{
    get { return conditions; }
    set { return contitions;
    OnPropertyChanged("SelectedCondition");
    }
}

public void ConfirmCondition()
{
    if(SelectedCondition != null){
    conditions.Remove(SelectedCondition );
    }
}

工作?@Matt Lacey如果你像删除项目一样添加项目,你不需要解析可观察集合。

胡玉书
2023-03-14

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

因为要使用一个单独的对象来跟踪选择了哪个集合,所以需要在集合中找到相应的项,并将其删除。(你不能从一开始不在集合中的集合中删除项目。即使它们在屏幕上以相同的方式显示。)

试试这样。

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

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

 类似资料:
  • 我需要能够从角材料列表中删除选定的项目。为此,我决定从初始项目数组中减去选定项目数组(不确定这是最好的方法)。 我的问题是,我找不到一种方法来将超文本标记语言中的选定项数组传递给TS并使用它。 Angular材料在其留档中有以下示例: 其中x是mat-seltion-list选择器的ID,y是对所选元素执行的操作。但这似乎只适用于超文本标记语言。 下面是我不工作的代码。 HTML,其中我设置了列表

  • 问题内容: 如何从选择框中删除项目或向其中添加项目?我正在运行jQuery,这应该使任务更轻松。下面是一个示例选择框。 问题答案: 删除一个选项: 添加一个选项:

  • 问题内容: 谁能告诉我从我删除所选项目的简便方法? 我在Google和此处进行了搜索,但发现了很多方法。我应该使用哪种方式? 问题答案: 正如@Andreas_D所说,以数据为中心,更抽象的ListModel是解决方案。这可以是DefaultListModel。您应该在JList中显式设置模型。所以(感谢@kleopatra发表评论): DefaultListModel中有几种方法。 顺便说一句,

  • 问题内容: 我是AngularJS的新手。我进行了很多搜索,但是并不能解决我的问题。 我第一次在选择框中得到一个空白选项。 这是我的HTML代码 JS 但这似乎不起作用。我该如何解决?这是JSFiddle演示 问题答案: 当传递给的一组选项中不存在被引用的值时,将生成空值。这样做是为了防止意外选择模型:AngularJS可以看到初始模型是未定义的还是未在选项集中,并且不想自行决定模型的值。 简而言

  • 我有一个表,其中有多个表项可用。其中,对于某些表项,设置了背景和前景色。 在选择彩色项目时,由于文本颜色为白色,文本很难阅读,因此,我需要将前面的颜色更改为默认颜色,即黑色。我是用选择侦听器完成的 成功地改变了颜色。 但是现在我正在选择任何其他没有着色的项目,所以我想删除上面的选择侦听器并将文本颜色设置为彩色即白色。我不知道如何使用。 有人能帮忙吗?

  • 我使用Angular 7.2创建一个选择控件,如下所示: 这正是我们想要的。我有一些代码希望删除选定的项目,大致如下: 虽然这会将其从选定项的数组中删除。如果我从选择控件中选择新值,则所有原始项仍被选中(即勾选)。 如何清除所选项目? 根据@Maarti的响应,我的代码现在可以使用