2012-07-02 2 views
0

Silverlight 응용 프로그램에 목록 상자가 있습니다. 목록 상자 :목록 상자 항목을 목록 상자에서 제거 할 수 없습니다.

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 

그리고이 하위가 호출 될 때 완벽하게 작동합니다

<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 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 개체를 만들고, 몇 개의 값을 넣은 다음이 새로 만든 개체를 컬렉션에서 제거하려고 시도하는 것으로 나타납니다. 컬렉션에 추가되지 않은 항목을 제거하려고하기 때문에 예상 한 동작을 얻지 못하는 것 같습니다. 당신의 vw_HazList_By_TaskID 클래스

  1. 재정 Equals : 내가 볼 수

    는 지금까지, 문제에 대한 두 가지 솔루션이 있습니다. 이렇게하면 새 개체를 컬렉션의 기존 개체와 동일하게 간주 할 수 있으므로 제거하려는 개체와 동일한 개체를 Remove에 전달하여 컬렉션에서 개체를 제거 할 수 있어야합니다.

  2. iHazIDsHaz_Name 속성이 일치하는 vw_HazList_By_TaskID 개체를 컬렉션에서 찾아보고 해당 개체를 컬렉션에서 제거하십시오.

또한, ObservableCollection(Of T)Remove 클래스의 메소드는리스트로부터 값을 제거 할 수 있었는지를 나타내는 Boolean 값을 반환한다. 제거 할 항목이 없으면 예외를 throw하는 대신 False을 반환합니다. 이 같은

0

시도 :

HazListByTaskIDCollection.RemoveAt(HazListByTaskIDCollection.IndexOf(yyy)); 
관련 문제