【问题标题】:WPF listbox : problem with selectionWPF列表框:选择问题
【发布时间】:2010-12-09 02:08:05
【问题描述】:

在我的 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 时,它不会取消对上一个选择的焦点。

那么就看不到实际选中了哪个item,也就无法得到SelectedIndex的值。

有人有想法吗?

【问题讨论】:

    标签: wpf listbox selection


    【解决方案1】:

    问题在于列表框无法区分不同的值。因此,一旦您单击“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>
    

    最好的问候
    奥利弗·哈纳皮

    【讨论】:

    • 它显示数字 10,但这只是一个示例。在实践中,我有一个显示游戏卡集合的列表框,还有一个显示添加到套牌中的这些卡的 ID 的列表框。由于可能有 3-4 次相同的卡,因此可能有多次相同的值。这是我的问题。
    • 我看到了你的问题。把你的卡片结构变成一个类。因此,用户将看到同一张卡片两次,但在内部它不会相同(引用相等与值相等)。确保不要以实现值相等的方式覆盖 Equals 和 GetHashCode 方法。
    • 奥利弗是正确的。您的列表框使用数字“10”作为对象的键。由于您有多个“10”,因此所有这些都被选中。您需要有一些东西来区分它们,因此他在上面建议了对象。
    • 我知道这是一个非常古老的问题,但我只是对您的回答感到好奇,它将如何帮助将模型绑定到另一个列表框,并将 displaymemberPath 设置为 Value?可能是显而易见的事情,我似乎无法理解它。谢谢你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多