WPF избегайте добавления дублирующейся строки

Я использую vb.net Framework 4.5 и проект WPF.

У меня есть кнопка, функция добавляет определенную информацию о продукте в сетку данных. В моем файле кода VB я установил класс продукта

Public Class MyProduct
    Public Property ItemNumber As String
    Public Property ItemDescription As String
    Public Property ItemUnitPrice As Double
    Public Property ItemQty As Integer
End Class

Событие касания кнопки

Private Sub Button_TouchDown(sender As Object, e As TouchEventArgs)

        Dim dmb As New MyProduct
        dmb.ItemNumber = "abc001"
        dmb.ItemDescription = "bla bla bla"
        dmb.ItemQty = 1
        dmb.ItemUnitPrice = 123.45

        MyDataGrid.Items.Add(dmb)

End Sub

В настоящее время, если я нажму несколько раз на эту кнопку, сетка данных добавит несколько дублированных строк для одного и того же продукта. Моя цель состоит в том, чтобы при добавлении в сетку данных одного и того же продукта отображалась только одна строка, и каждое дополнительное нажатие / нажатие на одну и ту же кнопку будет увеличивать только номер ItemQty.

Как я могу это сделать? Спасибо!

1 ответ

Во-первых, вам нужно предотвратить вставку дважды:

Private Sub buttonAdd_Click(sender As Object, e As RoutedEventArgs) Handles buttonAdd.Click
    Dim dmb As New MyProduct
    dmb.ItemNumber = New Random().Next(5).ToString()
    dmb.ItemDescription = "bla bla bla"
    dmb.ItemQty = 1
    dmb.ItemUnitPrice = 123.45

    Dim dmbSearched As MyProduct = Nothing
    For Each dmbs As MyProduct In MyDataGrid.Items
        If dmbs.ItemNumber = dmb.ItemNumber Then
            dmbSearched = dmbs
            Exit For
        End If
    Next

    If dmbSearched Is Nothing Then
        MyDataGrid.Items.Add(dmb)
    Else
        dmbSearched.ItemQty += 1
    End If
End Sub

Во-вторых, класс MyProduct должен вызывать событие при изменении количества, в противном случае видимых изменений нет:

Public Class MyProduct : Implements INotifyPropertyChanged
    Private Property m_ItemQty As Integer
    Public Property ItemQty As Integer
        Get
            Return m_ItemQty
        End Get
        Set(value As Integer)
            m_ItemQty = value
            FirePropertyChanged()
        End Set
    End Property
    Public Sub FirePropertyChanged(<CallerMemberName> Optional propName As String = "")
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
    End Sub
    Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
    Public Property ItemNumber As String
    Public Property ItemDescription As String
    Public Property ItemUnitPrice As Double

End Class

С уважением

Другие вопросы по тегам