我将 Horizontal ItemsControl 转换为 Listbox,以便能够选择单个项目,但发现选择已损坏。花了一些时间来提炼出有问题的部分。
Books = new[] { new Book{Id=1, Name="Book1"},
new Book{Id=2, Name="Book2"},
new Book{Id=3, Name="Book3"},
new Book{Id=4, Name="Book4"},
new Book{Id=3, Name="Book3"},
};
<DataTemplate DataType="{x:Type WPF_Sandbox:Book}">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
<ListBox ItemsSource="{Binding Books}"/>
如果 Book 是一个结构,如果您选择的项目在列表中具有等效结构,则列表框选择(默认模式:单一)会出错。例如书 3
如果 Book 变成一个类(具有非值类型语义),则选择是固定的。
选择(到目前为止,不喜欢其中任何一个):
- 我选择 structs 是因为它是一个小型数据结构,并且值类型语义在比较 2 个实例是否相等时很有用。将其更改为类会导致我失去值类型语义。我不能再使用默认的 Equals 或覆盖它以进行成员比较。
- 添加一个独特的 Book 属性,纯粹是为了让列表框选择起作用(例如索引)。
- 消除重复.. 不可能。
WPF 列表框:选择问题:声明列表框正在设置 SelectedItem,并且在为此更新 UI 时,它只是点亮列表中的所有项目Equal(SelectedItem)
。不知道为什么.. 突出 SelectedIndex 会使这个问题消失;也许我错过了一些东西。
即使在 SelectionMode="Single" 中,ListBox 也会选择许多项目:当列表项目是字符串时显示相同的问题(值类型语义)