У меня есть приложение WPF, у которого есть список, связанный с ObservableCollection, который извлекает его данные из базы данных.Я пытаюсь обновлять данные ListBox каждую минуту с помощью DispatcherTimer.
Dim dispatcherTimer As DispatcherTimer = New System.Windows.Threading.DispatcherTimer
AddHandler dispatcherTimer.Tick, AddressOf getRoomMeetingDetails
dispatcherTimer.Interval = New TimeSpan(0, 2, 0)
dispatcherTimer.Start()
, который вызывает метод getRoomMeetingDetails следующим образом.
Public Sub getRoomMeetingDetails()
If Not My.Settings.rbConn = Nothing And _
Not gl_rmName = Nothing Then
Dim sqlConn As New SqlConnection(My.Settings.rbConn)
Dim sqlquery As String = "SELECT *" & _
"FROM table " & _
Dim sqlCmd As New SqlCommand(sqlquery, sqlConn)
sqlConn.Open()
Dim dr As SqlDataReader
dr = sqlCmd.ExecuteReader
While dr.Read
roomMeetingList.Add(New meetingDetails() With {.eMeetingId = dr.Item("dId")})
End While
End If
End Sub
У меня есть два классадля коллекции следующим образом (я очень новичок в ObservableCollections и изо всех сил стараюсь смоделировать мой код на примерах MSDN, поэтому, если это не лучший метод для достижения того, чего я пытаюсь достичь, или это можно сделатьпроще, пожалуйста, дайте мне знать)
Public Class MeetingList
Inherits ObservableCollection(Of meetingDetails)
Private Shared list As New MeetingList
Public Shared Function getList() As MeetingList
Return list
End Function
Private Sub New()
AddItems()
End Sub
Public Shared Sub reset(ByVal rmName As String)
list.ClearItems()
list.AddItems()
End Sub
Private Sub AddItems()
End Sub
End Class
Public Class meetingDetails
Implements INotifyPropertyChanged
Public Sub New()
End Sub
Public Property eID() As String
Get
Return _eID
End Get
Set(ByVal value As String)
_eID = value
OnPropertyChanged("eID")
End Set
End Property
Private _eID As String
Public Event PropertyChanged As PropertyChangedEventHandler _
Implements INotifyPropertyChanged.PropertyChanged
End Class
Что происходит, когда DispatcherTimer вызывается каждую минуту, данные ListBox дублируются, что, я считаю, происходит потому, что метод getRoomMeetingDetails добавляет все результаты SQL на каждомпоставить галочку.Как я могу обновить ListBox только новыми данными или изменениями данных из таблицы?
Я действительно изо всех сил пытаюсь понять, где я иду не так, и что нужно добавить / удалить, чтобы это работало.
Если есть какие-либо данные, которые мне не хватает, пожалуйста, дайте мне знать.
Мэтт