Hallo zusammen,
Ich habe ein Business-Objekt:
Beim Programmstart fülle ich eine Collection(Of EQ_Component) mit einer vielzahl von Instanzen dieses Objekts aus denen der User welche auswählen kann.
Ich habe ein TabControl und auf jedem TabControl befindet sich ein DataGridview das an eine BindingList(Of EQ_Component) gebunden ist. Wählt der User Componenten aus, so landen diese in der BindingList und werden im DataGridView angezeigt.
Es gibt die Funktion mit welcher der Anwender eine EQ_Component von einer BindingList in eine andere BindingList zu kopieren kann. Mir ist nun aufgefallen, dass sobald er dies tut, die ChangeEvents in der QuellListe ausgelöst werden und nicht in der Liste in der er das Objekt kopiert hat.
Die Lösung war, beim Ausführen von Clone() den PropertyChanged Delegaten in der Kopie auf Nothing zu setzten. Es scheint zu funktionieren, aber ich bin mir nicht sicher ob das der Richtige weg ist. Scheint mir mehr ein Workaround zu sein. Vielleicht kennt ihr einen besseren Weg?
Ich habe ein Business-Objekt:
VB.NET-Quellcode
- Public Class EQ_Component
- Implements ICloneable
- Implements INotifyPropertyChanged
- Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
- Public Function Clone() As Object Implements System.ICloneable.Clone
- Dim copy As EQ_Component = Me.MemberwiseClone()
- copy.ResetChangeEvent()
- Return copy
- End Function
- Protected Sub ResetChangeEvent()
- PropertyChangedEvent = Nothing
- End Sub
- Private m_ItemName As String = String.Empty
- Public Property ItemName As String
- Get
- Return m_ItemName
- End Get
- Set(value As String)
- m_ItemName = value
- RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(EQ_Tools.GetMemberName(Function() Me.ItemName)))
- End Set
- End Property
- '..... viele weitere Properties dieser Art (String, Double, Long werte etc...)
Beim Programmstart fülle ich eine Collection(Of EQ_Component) mit einer vielzahl von Instanzen dieses Objekts aus denen der User welche auswählen kann.
Ich habe ein TabControl und auf jedem TabControl befindet sich ein DataGridview das an eine BindingList(Of EQ_Component) gebunden ist. Wählt der User Componenten aus, so landen diese in der BindingList und werden im DataGridView angezeigt.
Es gibt die Funktion mit welcher der Anwender eine EQ_Component von einer BindingList in eine andere BindingList zu kopieren kann. Mir ist nun aufgefallen, dass sobald er dies tut, die ChangeEvents in der QuellListe ausgelöst werden und nicht in der Liste in der er das Objekt kopiert hat.
Die Lösung war, beim Ausführen von Clone() den PropertyChanged Delegaten in der Kopie auf Nothing zu setzten. Es scheint zu funktionieren, aber ich bin mir nicht sicher ob das der Richtige weg ist. Scheint mir mehr ein Workaround zu sein. Vielleicht kennt ihr einen besseren Weg?