2009-10-22 179 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