2012-07-02 147 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));