2017-07-13 20 views
0

Ich habe eine WPF-Anwendung in VB mit mehreren Fenstern geschrieben. Diese Fenster haben mehrere Steuerelemente, damit die Benutzer Daten eingeben können. Diese Daten werden dann in einer Datenbank gespeichert. Ich möchte, dass die Benutzer in der Lage sind, einen bestimmten Datensatz zu bearbeiten, und es wäre viel bequemer, dasselbe Fenster zu verwenden, in dem die Daten eingegeben wurden. Je nachdem, ob der Benutzer auf "Hinzufügen" oder "Bearbeiten" klickt, möchte ich um anderen Code hinter dem Fenster laufen zu lassen.Verwenden Sie das gleiche WPF-Fenster für zwei verschiedene Zwecke

Mein Problem ist, dass ich nicht herausfinden kann, wie man zwischen diesen beiden Ereignissen unterscheidet. Die MainWindow-Klasse verfügt über die Schaltflächen "Hinzufügen" und "Bearbeiten". Wenn sie geklickt werden, erstellen sie eine neue Registerkarte, die eine neue Instanz von "Data.xaml" enthält. "Data.xaml" hat "Data.vb" dahinter. Wie kann "Data.vb" sagen, ob Code "Edit" oder "Add" ausgeführt werden soll?

Antwort

0

Einfache Lösung ist eine Eigenschaft auf die Data Klasse hinzuzufügen, die sagen, was getan werden sollte:

Public Partial Class Data Inherits Window 
    // ... 

    Public Property Mode As Mode 

    // ... 
End Class 

wo Mode mit zwei Feldern Enum ist: Add und Edit.

In Click-Handler von Add Taste eingestellt Mode zu Mode.Add, in Click-Handler von Edit Schaltfläche Mode-Mode.Edit gesetzt.

Wenn Sie Änderung der Mode nach Fenster verhindern gebaut Sie neue Konstruktor erstellen können, die Mode als Argument nehmen:

Public Partial Class Data Inherits Window 
    // ... 

    Public Sub New(mode As Mode) 
     Me.New() 
     Mode = mode 
    End Sub 

    Public ReadOnly Property Mode As Mode 

    // ... 
End Class 

Dann in Ihre Logik in Data.vb Blick auf die Mode und tun entsprechende Maßnahmen.

Private Sub AddButton_Click(sender As Object, e As RoutedEventArgs) 
    Dim dataWindow = New Data(Mode.Add) 
    dataWindow.ShowDialog() 
End Sub 

Private Sub EditButton_Click(sender As Object, e As RoutedEventArgs) 
    Dim dataWindow = New Data(Mode.Edit) 
    dataWindow.ShowDialog() 
End Sub 
+0

FYI Frage ist VB, so könnte es nett sein, Ihren Code entsprechend zu übersetzen. – Craig

+0

@Craig Vielen Dank. Ich habe das 'vb.net'-Tag nicht bemerkt. – Maxim

+0

Ich hätte klarer sein sollen - 'Data' ist eine Klasse in einem Rahmen, der wiederum in einem Tabitem enthalten ist. Mein Problem ist die Weitergabe von Informationen durch den Frame ... – Sharpmetalobject

Verwandte Themen