ListBox SelectionMode 单个 多个 select

ListBox SelectionMode Single multiple select

我在 WPF 程序中使用 ListBox 时遇到了一个相当奇怪的问题。 我已经将我的 ListBox SelectionMode 定义为 Single,但看起来即使在视觉上我不能 select 倍数项目,它也发生在代码中。 可以在这里看到:

当尝试做一个解决方法时,我尝试使用函数 UnselectAll,它相当奇怪地仍然留下一个项目 selected :

作为最后的礼物,一旦多个项目被 selected,如果我尝试点击我的未selected visually,selected in the code,item我的应用程序因 System.ArgumentException 而崩溃(我想它会尝试 select 我的项目,实际上它已经 selected 了,所以它崩溃是因为添加了一个完美的副本?)

我调查了 ListBox is selecting many items even in SelectionMode="Single" 也有同样的问题,但在我的情况下,我无法在视觉上 select 多个项目,而且我的项目完全不同,所以它并没有真正帮助。

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

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

我的问题出在哪里? 我该如何解决?

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

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

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

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