列表框SelectionMode单选 - c#

ListBox程序上使用WPF时遇到一个相当奇怪的问题。
我已经将ListBox SelectionMode定义为Single,但是看起来即使我在视觉上无法选择多个项目,它也会在代码中发生。
从这里可以看出:
列表框SelectionMode单选 - c#

当尝试执行解决方法时,我尝试使用功能UnselectAll,但它仍然很残酷地使项目保持选中状态:
列表框SelectionMode单选 - c#

最后一件礼物是,一旦选择了多个项目,如果我尝试单击代码中选择的未选择的外观,则该项目会使我的应用程序崩溃,并出现System.ArgumentException(我想它试图选择我的项目,该项目已被选中)实际上,由于添加了完美的副本,它崩溃了吗?)
列表框SelectionMode单选 - c#

我调查了具有相同问题的ListBox is selecting many items even in SelectionMode="Single",但就我而言,我无法直观地选择多个项目,而且我的项目完全不同,因此它实际上没有帮助。

我在ListBox.Click上没有任何自定义行为,可能会惹上一些麻烦...

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

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

参考方案

这样,终于找到了我问题的根源。

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

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

获取ListBoxItem的索引-WPF - c#

如何获取ListBoxItem的索引?ListBox通过XmlDataProvider绑定到XML节点的集合。 参考方案 我有一个类似的问题,得到了回答here基本上,您将ListBox的AlternationCount设置为非常高的值,并绑定到每个项目上的AlternationIndex<ListBox AlternationCount="…

WPF-将窗口大小设置为子用户控件大小 - c#

我有一个选项卡控件,该控件动态地填充有包含各种大小的用户控件的选项卡。打开选项卡后,我希望窗口自动调整大小,使其在活动用户控件下有意义。有一种干净的方法可以做到这一点吗?我正在使用标准的mvvm模式。 参考方案 在Window类上使用SizeToContent属性。<Window x:Class="WpfApplication1.MainWi…

WPF WebBrowser甚至使用ObjectForScripting在单独的线程上锁定UI - javascript

在与WPF Web浏览器控件绑定的ObjectForScripting上调用方法时,网页UI锁定会出现一个奇怪的问题。进一步的研究使我们意识到整个UI(包括WPF应用程序而不是WebBrowser)都已锁定。使用的技术是带有Caliburn.Micro和Autofac的WPF。我在COM可见类上使用方法来推送到Caliburn.Micro提供的事件聚合器。进…

WPF MVVM中的动态TabControl - c#

我几周前开始使用WPF(在C#中),现在我需要一些高级帮助来使用tabcontrol。首先,我正在使用MVVM(模型视图ViewModel)模式来设计我的应用程序,并且我有一个约束,即试图不要在文件(初始化xaml文件)后面的代码中添加代码。现在,我的问题是在MainWindow视图(窗口)中动态创建新的tabItem,当单击按钮(例如“新建选项卡”按钮)时…

C#WPF-如何始终从文本框中获取当前文本? - c#

我在FileWindow.xaml中有一个TextBox:<TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="233,230,0,0" TextWrapping="Wra…