在我的XAML文件中,我有一个像这样声明的ListBox:
<ListBox x:Name="lstDeck" Height="280" ItemsSource="{Binding Path=Deck}" >
<ListBox.ItemTemplate>
<DataTemplate>
<ListBoxItem Content="{Binding}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在我的视图模型中,Deck是一个ObservableCollection,因此绑定直接显示我的集合的内容。
但是当我有几个值保持相同的值时(例如“10”六次), ListBox中的选择有一个奇怪的行为:它选择2-3个元素而不是我点击的唯一元素。
此外,当我点击另一个listBoxItem时,它不会使之前选择的一个没有聚焦。
然后无法看到实际选择了哪个项目,也无法获得SelectedIndex值。
有人有想法吗?
答案 0 :(得分:8)
问题在于列表框能够区分不同的值。因此,一旦单击其中一个“10”,它就会设置SelectedItem属性并更新其显示。因为它无法区分值类型,所以它将每个“10”标记为已选中。
但为什么你的列表框中有几次“10”?如果它只是数值10或字符串“10”,那对我没有任何意义。
如果你后面有一个更复杂的模型而你只显示一个属性,那么你应该绑定复杂模型并改为设置DisplayMemberPath。
C#
public class Model
{
public Guid Id { get; set; }
public string Value { get; set; }
}
XAML
<ListBox ItemsSource="{Binding Path=Models}" DisplayMemberPath="Value" />
<ListBox ItemsSource="{Binding Path=Models}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Value}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
最诚挚的问候 Oliver Hanappi