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

当这个 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

这运行没有错误,但它不会从列表框中删除该项目。

我究竟做错了什么?

4

2 回答 2

0

试试这样:

HazListByTaskIDCollection.RemoveAt(HazListByTaskIDCollection.IndexOf(yyy));
于 2012-07-03T09:43:07.257 回答
0

您的RemoveHazListItem方法似乎正在创建一个新vw_HazList_By_TaskID对象,将几个值放入其中,并尝试从您的集合中删除这个新创建的对象。似乎您没有得到您期望的行为,因为您试图从集合中删除一个从未添加到其中的项目。

据我所知,您的问题有两种解决方案:

  1. Equals在你的vw_HazList_By_TaskID类中覆盖。这样做应该允许新对象被认为等于集合中的现有对象,因此您应该能够通过传递给与您要删除的对象相同的对象来从集合中删除对象Remove

  2. 在集合中查找vw_HazList_By_TaskID具有匹配iHazIDsHaz_Name属性的对象,然后从集合中删除该对象。

顺便说一句,该类的Remove方法ObservableCollection(Of T)返回一个Boolean值,指示它是否能够从列表中删除一个值。如果未找到要删除的项目,它会返回False而不是引发异常。

于 2012-07-02T20:57:09.677 回答