2015-10-01 2 views
0

Я использую vb.net framework 4.5 и проект WPF.WPF не добавляйте повторяющуюся строку

У меня есть кнопка, функция добавляет определенную информацию о продукте в datagrid. В моем файле 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 

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

Как я могу это сделать? Благодаря!

+0

Похоже, что ваш DataGrid должен быть привязкой к запросу, который выполняет группу по продуктам. Вы в настоящее время просто привязываетесь к 'ObservableCollection '? –

+0

@ LynnCrumbling, я просто привязываюсь к имени каждого coloumn. Я не уверен, что правильно понимаю ваш вопрос. Я новичок в проекте WPF. следующий код для моего xaml. – apolloneo

+0

apolloneo

ответ

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 

С уважением