【问题标题】:ListBox SelectionMode Single multiple selectListBox SelectionMode 单选多选
【发布时间】:2016-08-12 14:22:12
【问题描述】:

WPF 程序上使用ListBox 时,我遇到了一个相当奇怪的问题。 我已将我的ListBoxSelectionMode 定义为Single,但似乎即使在视觉上我无法选择多个项目,它也会发生在代码中。 可以在这里看到:

在尝试解决方法时,我尝试使用 UnselectAll 函数,但它仍然很奇怪地仍然选择了一个项目:

作为最后的礼物,一旦选择了多个项目,如果我尝试单击未选择的视觉对象,在代码中选择,项目我的应用程序崩溃并出现 System.ArgumentException(我想它会尝试选择我的项目,实际上已经选择了,因此由于添加了完美的副本而崩溃了?)

我查看了ListBox is selecting many items even in SelectionMode="Single" 有同样的问题,但在我的情况下,我无法直观地选择多个项目,而且我的项目完全不同,所以它并没有真正的帮助。

我在 ListBox.Click 上没有任何自定义行为可能会弄乱某些东西...

我的ListBox.ItemsSource 绑定到一个项目列表。 调用 useItem 时,我将减少所选项目的属性值,但它仍然是同一个项目(我不重新创建它/删除它然后重新添加它)

我的问题来自哪里? 我该如何解决?

【问题讨论】:

  • SelectedItems 是否绑定到您的 xaml 中的任何内容?
  • 是否有其他东西正在向该列表添加项目?
  • 我正在修改 'useItem' 函数中的选定项目(我的项目有一个 int charge 字段,我将其减 1)。但是我只修改了item,没有创建新的。

标签: c# wpf listbox listboxitem


【解决方案1】:

所以,终于找到了我的问题的根源。

有了自定义项,我不得不重新定义我的 Equals 函数。 然后我也不得不重新定义我的 GetHashCode 函数,它基于我的几个属性,包括我正在递减的字段...
因此,当我更改字段时,我会同时更改我的HashCode,我无法再访问我的项目。

将我的 GetHashCode 函数更改为基于不可变字段解决了我的问题。

【讨论】:

    【解决方案2】:

    如果您的SelectionModeSingle,则不应按照documentation 绑定到SelectedItems。只需使用SelectedItem

    【讨论】:

    • 我没有。我的绑定如下:listItemSave = new BindingList<Item>(hero.backPack.getItems);listBoxBackPackItem.ItemsSource = this.listItemSave;我从不使用SelectedItems,它只在Watch上可见,我只在代码中使用SelectedItem。编辑:刚刚看到我误解了之前的评论,认为它是在询​​问我是否绑定了我的 listItems(我的 ItemsSource),这是我的错误。我不确定我是否可以编辑我之前的评论来纠正我的错误。
    • 好的,很好。您如何注意到这个问题(调试时除外)? UI 中是否有多个项目显示为选中状态? SelectedItem 是错误的项目吗?你Food 班级是什么样子的?
    • SelectedItem 是 SelectedItems 中的第一项,这意味着如果我尝试选择另一个 Item 并对其执行操作,它仍会尝试对第一项执行操作。然后当我尝试再次选择我的第一个项目时(所以他没有在视觉上被选中,而是出现在我的 SelectedItems 中)我的应用程序将按照我的第三个屏幕截图崩溃。
    • 我的食物类包含一个字符串(名称)和一个整数(nbCharges)。在我的函数中,我将减少 nbCharges。如果您需要它,可以在这里找到完整的代码github.com/Belterius/LDVELH/tree/WPFBranch/LDVELH_WPF 相关文件将是 mainwindow.xaml.cs、Item.cs 和 EventHandler.cs
    • 我无法确定确切的问题,但我注意到您至少对ItemsSource 属性不使用Binding,并且几乎所有内容都在后面的代码中设置。我建议重构一下:开始使用 MVVM 模式,它会让你的 WPF 生活更轻松。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 2018-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多