2012-07-02 215 views
0

我在Silverlight應用程序中有一個列表框。 列表框:無法從列表框中刪除列表框項目

<ListBox Grid.Row="1" Grid.ColumnSpan="2" Name="lbHazards" Margin="5" 
     MinHeight="75" ItemsSource="{Binding Path=HazListByTaskIDCollection}" 
     DisplayMemberPath="sHaz_Name" 
     IsEnabled="{Binding Path=IsEnabled}" /> 

在視圖模型我有

Private _HazListByTaskIDCollection As ObservableCollection(Of vw_HazList_By_TaskID) 

Public Property HazListByTaskIDCollection() As ObservableCollection(Of vw_HazList_By_TaskID) 
    Get 
     Return _HazListByTaskIDCollection 
    End Get 
    Set(ByVal value As ObservableCollection(Of vw_HazList_By_TaskID)) 
     _HazListByTaskIDCollection = value 
     'Used to notify CommonBase class that a property change has occured 
     RaisePropertyChanged("HazListByTaskIDCollection") 
    End Set 
End Property 

然後我在視圖模型子:

Public Sub FillHazList(ByVal iHazID As Integer, ByVal sHaz_Name As String) 
    Try 

     Dim yy = New vw_HazList_By_TaskID 

     yy.iHazID = iHazID 
     yy.sHaz_Name = sHaz_Name 

     HazListByTaskIDCollection.Add(yy) 


    Catch ex As Exception 
     DisplayError("Error Happened", ex) 
    End Try 

End Sub 

這完美的作品時,這個小組被稱爲項目被添加到列表框中。 但我也需要能夠從列表框中 所以我想,所以我創建了另一個子

Public Sub RemoveHazListItem(ByVal iHazID As Integer, ByVal sHaz_Name As String) 
    Try 
     Dim yyy = New vw_HazList_By_TaskID 

     yyy.iHazID = iHazID 
     yyy.sHaz_Name = sHaz_Name 
     HazListByTaskIDCollection.Remove(yyy) 

     HazListByTaskIDCollection.Clear() 

    Catch ex As Exception 
     DisplayError("Error Happened", ex) 
    End Try 
End Sub 

這將運行沒有錯誤,將是很容易刪除的項目,但它不會從刪除的項列表框。

我在做什麼錯?

回答

0

您的RemoveHazListItem方法似乎創建了一個新的vw_HazList_By_TaskID對象,並在其中添加了一對值,並試圖從集合中刪除這個新創建的對象。看起來你沒有得到你期望的行爲,因爲你試圖從集合中刪除一個從未添加到它的項目。

據我所看到的,有兩種解決方案,您的問題:

  1. 覆蓋Equalsvw_HazList_By_TaskID類。這樣做應該允許將新對象視爲與集合中的現有對象相同,因此您應該能夠通過傳遞與要刪除的對象相等的對象來從集合中刪除對象。

  2. 通過集合查找具有匹配的iHazIDsHaz_Name屬性的vw_HazList_By_TaskID對象,並將該對象從集合中移除。

順便提及,ObservableCollection(Of T)類的Remove方法返回一個Boolean值,指示它是否能夠從列表中刪除的值。如果要刪除的項目未找到,則返回False而不是拋出異常。

0

嘗試這樣的:

HazListByTaskIDCollection.RemoveAt(HazListByTaskIDCollection.IndexOf(yyy));