WPF列表框:选择问题

KiT*_*iTe 3 wpf listbox selection

在我的XAML文件中,我有一个像这样声明的ListBox:

           <ListBox x:Name="lstDeck" Height="280" ItemsSource="{Binding Path=Deck}"  >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <ListBoxItem  Content="{Binding}" />
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
Run Code Online (Sandbox Code Playgroud)

在我的视图模型中,Deck是一个ObservableCollection,因此绑定直接显示我的集合的内容.

但是当我有几个值保持相同的值(例如"10"六次)时,ListBox中的选择有一个奇怪的行为:它选择2-3个元素而不是我点击的唯一元素.

此外,当我点击另一个listBoxItem时,它不会使之前选择的一个没有聚焦.

然后就不可能看到实际选择了哪个项目,也无法获得SelectedIndex值.

有人有想法吗?

Oli*_*ppi 8

问题是列表框会区分不同的值.因此,一旦单击其中一个"10",它就会设置SelectedItem属性并更新其显示.因为它无法区分值类型,所以它将每个"10"标记为已选中.

但为什么你的列表框中有几次"10"?如果它只是数值10或字符串"10",那对我来说没有任何意义.

如果你后面有一个更复杂的模型而你只显示一个属性,那么你应该绑定复杂模型并改为设置DisplayMemberPath.

C#

public class Model
{
    public Guid Id { get; set; }
    public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)


诚挚的问候Oliver Hanappi

  • 我看到你的问题.将您的卡片结构变成一个类.因此,用户将看到相同的卡两次,但在内部它将不相同(引用相等与值相等).确保不以实现值相等的方式覆盖Equals和GetHashCode方法. (2认同)