2015-02-04 105 views
0

組合框有一些非常奇怪的行爲。 Threre是一個綁定它的ObservabalCollection。值正確顯示。我可以將一些值添加到綁定到combobox_PragmaSections的集合中,它們會顯示出來,我可以在它們之間切換。組合框顯示綁定值,但選擇不可能

有一些文本框和一個DoubleUpDown,我可以在其中設置combobox_PragmaSections的選定項的一些propertys。

當我在文本框或DoubleUpDown中插入一些值時,combobox_PragmaSections「凍結」。它顯示包含值,下拉是可能的,但如果我嘗試選擇比當前值更大的值,則不會發生任何情況。當我刪除我的isEqual和getHashCode函數它的工作....沒有人有一個想法發生了什麼?

<ComboBox x:Name="combobox_PragmaSections" ItemsSource="{Binding currentTask.list_PragmaSections}" 
DisplayMemberPath="ViewName" Margin="13,271,10,0" VerticalAlignment="Top" 
Grid.Column="1"/> 

<TextBox Text="{Binding SelectedItem.Name,ElementName=combobox_PragmaSections}" 
    Height="23" Margin="13,298,10,0" TextWrapping="Wrap" 
    VerticalAlignment="Top" Grid.Column="1"/> 



<TextBox Text="{Binding SelectedItem.FLAGS, ElementName=combobox_PragmaSections}" Height="23" Margin="13,324,10,0" 
     TextWrapping="Wrap" VerticalAlignment="Top" Grid.Column="1"/> 

<xctk:DoubleUpDown Value="{Binding SelectedItem.Alignment, 
ElementName=combobox_PragmaSections}" Margin="96,353,10,0" 
VerticalAlignment="Top" Grid.Column="1" Height="20"/> 


    public override bool Equals(System.Object obj) 
    { 
     // If parameter is null return false. 
     if (obj == null) 
     { 
      return false; 
     } 

     // If parameter cannot be cast to Point return false. 
     Task_PragmaSection p = obj as Task_PragmaSection; 
     if ((System.Object)p == null) 
     { 
      return false; 
     } 
     bool isEqual = false; 
     // If parameter is null return false: 
     if ((object)p == null) 
     { 
      return false; 
     } 
     if (this.Unit == p.Unit && 
      this.Size == p.Size && 
      this.FLAGS == p.FLAGS && 
      this.File_Path == p.File_Path && 
      this.Description == p.Description && 
      this.completeSection == p.completeSection && 
      this.Alignment == p.Alignment && 
      this.Name == p.Name && 
      this.ViewName == p.ViewName && 
      this.Type == p.Type && 
      this.Qualifier == p.Qualifier && 
      this.list_Objects == p.list_Objects) 
     { 
      isEqual = true; 
     } 
     // Return true if the fields match: 
     return isEqual; 
    } 
    public override int GetHashCode() 
    { 
     unchecked 
     { 
      int hash = 486187739; 
      if (this.Name!=null) 
      { 
       hash = hash * 23 + this.Name.GetHashCode(); 
      } 
      if(this.ViewName!=null) 
      { 
       hash = hash * 23 + this.ViewName.GetHashCode(); 
      } 
      if(this.Alignment!=null) 
      { 
       hash = hash * 23 + this.Alignment.GetHashCode(); 
      } 
      return hash; 
     } 
    } 

回答

1

你的GetHashCode()看上去不正確,因爲價值你執行回報將對象的生命週期內改變(一旦名稱,視圖名或對齊分配)。這意味着實例可能會在字典或哈希集中丟失。如果你不需要把你的對象作爲字典中的鍵(並且你幾乎總是可以找到替代),你不應該重寫GetHashCode()。