Beim suchen nach Lösungen, meine Datagridview an eine BindingList(of T) zu binden, welche sich auch selbstständig updaten sollte, bin ich auf diesen Thread gestoßen.
Soweit funktioniert das ganze auch, allerdings nur solange wie nicht all zu viele PropertyChanged Events gleichzeitig reinflattern.
Testweise habe ich eine Klasse erstellt, die über einen eigenen Timer, einmal pro Sekunde einen Wert erhöht und dann das Event auslöst.
Bereits bei 5 Elementen, geschmissen zur gleichen Zeit in die BindingList(of T), verhaspelt sich die UI.
Sporadisch wird mal hier, mal da aktualisiert.
Bei Auswahl der Zellen / srollen werden alle sofort aktualisiert.
Hin und wieder kommt auch ein Fehler:
Benutze ich vlt die falsche Technik für meinen Anwendungsfall?
Gibt es bereits bessere Methoden?
Ausgelagert aus List(of T) an DataGridView binden. ~Thunderbolt
Soweit funktioniert das ganze auch, allerdings nur solange wie nicht all zu viele PropertyChanged Events gleichzeitig reinflattern.
Testweise habe ich eine Klasse erstellt, die über einen eigenen Timer, einmal pro Sekunde einen Wert erhöht und dann das Event auslöst.
Bereits bei 5 Elementen, geschmissen zur gleichen Zeit in die BindingList(of T), verhaspelt sich die UI.
Sporadisch wird mal hier, mal da aktualisiert.
Bei Auswahl der Zellen / srollen werden alle sofort aktualisiert.
Hin und wieder kommt auch ein Fehler:
Benutze ich vlt die falsche Technik für meinen Anwendungsfall?
Gibt es bereits bessere Methoden?
VB.NET-Quellcode
- 'User Class
- Public Class Class_User : Implements INotifyPropertyChanged
- Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
- Private m_UserName As String
- Private m_count As Integer = 0
- Private m_timer1 As New System.Timers.Timer
- Public Property UserName As String
- Get
- Return m_UserName
- End Get
- Set(value As String)
- m_UserName = value
- End Set
- End Property
- Public Property Count As Integer
- Get
- Return m_count
- End Get
- Private Set(value As Integer)
- m_count = value
- RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Count"))
- End Set
- End Property
- Public Sub New(p_UserName As String, p_interval As Double)
- m_UserName = p_UserName
- m_timer1.Interval = p_interval
- m_timer1.Enabled = True
- AddHandler m_timer1.Elapsed, AddressOf m_timer1Tick
- End Sub
- Private Sub m_timer1Tick(sender As Object, e As EventArgs)
- Count += 1
- End Sub
- Private Sub NotifyPropertyChanged(ByVal Info As String)
- RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(Info))
- End Sub
- 'Form Class
- Public Class Form1
- WithEvents users As New System.ComponentModel.BindingList(Of Class_User)
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- Bs1.DataSource = users
- Bs1.RaiseListChangedEvents = True
- DataGridView1.DataSource = Bs1
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- For index As Integer = 0 To 5
- 'fügt der BindingList neue User hinzu mit Username und Timer Interval in ms
- users.Add(New Class_User("User " & index.ToString, 1000))
- Next
- End Sub
- End Class
Ausgelagert aus List(of T) an DataGridView binden. ~Thunderbolt
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()