Feststellen wenn Auflistung geändert wurde.

09/03/2009 - 06:31 von Karsten Sosna | Report spam
Hallo NG,
folgender Konstrukt:
\\\
Public Class Test
Private _List As New List(Of String)

Public Property List() As List(Of String)
Get
Return _List
End Get
Set(value As List(Of String))
_List = value
End Set
End Property
End Class
///
Wenn die List als solches geàndert wird bebomme ich das ja im Setter mit.
Aber wie bekomme ich es hin, das ich mitbekomme, das ein Element der List
geàndert, gelöscht ober eingefügt wurde? Muss ich da wirklich eine eigene
List-Klasse schreiben, die die Methoden/ Eigenschaft Add, Remove, Item etc.
beinhaltet? Sprich halt so was:
\\\

Public Class InFormList(Of T) : Implements IList(Of T)

Public Event ItemAdded(ByVal sender As Object, ByVal e As EventArgs)
Public Event ListCleared(ByVal sender As Object, ByVal e As EventArgs)

Private _List As New List(Of T)

Public Sub Add(ByVal item As T) Implements
System.Collections.Generic.ICollection(Of T).Add
_List.Add(item)
Dim e As New ItemArgs(item)
RaiseEvent ItemAdded(Me, e)
End Sub

Public Sub Clear() Implements System.Collections.Generic.ICollection(Of
T).Clear
_List.Clear()
RaiseEvent ListCleared(Me, Nothing)
End Sub

'...
End Class

Public Class ItemArgs : Inherits EventArgs
Public InFormListItem As Object
Public Sub New(ByVal item As Object)
InFormListItem = item
End Sub
End Class
///
Danke für jeden Tipp.
Gruß Scotty
 

Lesen sie die antworten

#1 Peter Fleischer
09/03/2009 - 07:21 | Warnen spam
"Karsten Sosna" <k.sosna_NO_AT_SPAM_x-reflex.de> schrieb im Newsbeitrag
news:

...
Aber wie bekomme ich es hin, das ich mitbekomme, das ein Element der List
geàndert, gelöscht ober eingefügt wurde? Muss ich da wirklich eine eigene
List-Klasse schreiben, die die Methoden/ Eigenschaft Add, Remove, Item
etc. beinhaltet? Sprich halt so was:
\\\



Hi Karsten,
wenn dir ein Objekt nicht die gewünschten Ereignisse bringt, dann musst du
entweder einen anderen zur Anforderung passenden Typ nutzen oder dir einen
eigenen Typ ableiten, in dem du die gewünschten Ereignisse implementierst.
Ein Lösungsweg könnte das von dir aufgezeigte Beispiel sein. Ein anderer
Lösungsweg könnte so aussehen:

Option Explicit On
Option Infer On
Option Strict On

Imports System.ComponentModel

Public Module Module1

Sub Main()
Dim l As New InFormList(Of String)
AddHandler l.PropertyChanged, AddressOf PropChanged
l.add("xxx")
l.add("yyy")
l.Remove("xxx")
For Each itm In l
Console.WriteLine(" {0}", itm)
Next
Console.ReadLine()
End Sub

Private Sub PropChanged(ByVal sender As Object, _
ByVal e As PropertyChangedEventArgs)
Console.WriteLine("{0} wurde ausgeführt", e.PropertyName)
End Sub

End Module

Friend Class InFormList(Of T)
Inherits List(Of T)
Implements INotifyPropertyChanged

Public Event PropertyChanged(ByVal sender As Object, _
ByVal e As PropertyChangedEventArgs) _
Implements INotifyPropertyChanged.PropertyChanged

Public Shadows Sub add(ByVal item As T)
MyBase.Add(item)
RaiseEvent PropertyChanged(Me, _
New PropertyChangedEventArgs("Add"))
End Sub

Public Shadows Sub Remove(ByVal item As T)
MyBase.Remove(item)
RaiseEvent PropertyChanged(Me, _
New PropertyChangedEventArgs("Remove"))
End Sub

End Class


Viele Grüsse
Peter

Ähnliche fragen