2009-10-22 182 views
3

在我的XAML文件的问题,我宣布一个像这样的列表框:WPF列表框:与选择

  <ListBox x:Name="lstDeck" Height="280" ItemsSource="{Binding Path=Deck}" > 
       <ListBox.ItemTemplate> 
        <DataTemplate> 
         <ListBoxItem Content="{Binding}" /> 
        </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

在我的视图模型,甲板是一个ObservableCollection,所以直接绑定显示我收藏的内容。

但是,当我有几个值保持相同的值(例如“10”六次), 列表框中的选择有一个奇怪的行为:它选择2-3个元素,而不是唯一的我点击了。

此外,当我点击另一个listBoxItem时,它不会忽略先前选择的一个。

然后不可能看到哪个项目被实际选中,并且不可能获得SelectedIndex值。

有人想法吗?

+0

你设置的SelectionMode? – Sauron 2009-10-22 13:16:44

+0

是的,我用它设置为单个 – KiTe 2009-10-22 13:25:03

回答

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> 

问候
奥利弗Hanappi

+0

它显示数字10,但这只是一个例子。 在实践中,我有一个显示游戏卡集合的列表框,另一个显示添加到卡组的卡的ID。 由于有可能有相同的卡片有3-4次,所以可能有几次相同的值。 这是我的问题。 – KiTe 2009-10-22 13:32:28

+2

我看到你的问题。把你的卡片结构变成一个类。因此,用户将看到相同的卡片两次,但内部不会相同(引用相等与值相等)。确保您不会以实现值相等的方式重写Equals和GetHashCode方法。 – 2009-10-22 13:50:02

+0

奥利弗是正确的。您的列表框正在使用数字“10”作为对象的关键字。既然你有多个“10”,他们都被选中。你需要有一些东西来区分它们,因此他在上面建议的对象。 – 2009-10-22 13:52:15