2016-10-14 3 views
0

Ich habe ein Listview und eine TasteAddNewItem und zwei Formen beide in zwei Stapel Platten gewickelt: spanel1 und spanel2 , wenn ich ein Element aus der Liste auswählen , spanel1 Daten des ausgewählten Elements zeigt , wenn ich auf die Schaltfläche klicken Sie auf die Form spanel2 leer ModellHinzufügen neuer Artikel zu Listview

in der Ansicht ich habe zwei Eigenschaften: selectedItem und newItem Problem : wenn ich Daten des neuen Elements in Form von spanel2 füllen und klicken Sie auf Speichern das NewItem Eigenschaft geändert

wird nicht
private void SaveItem(object obj) 
    { 
     if (this.selectedItem != null) 
     { 
      this.item.EditAsync(this.selectedItem); 

     } 
     else 
     { 
      this.ietm.InsertAsync(this.NewItem); 
     } 

     this.LoadData(); 
     } 

private Item newItem; 

    public Item NewItem 
    { 
     get 
     { 

      return this.newItem ?? new Item(); 
     } 
     set 
     { 
      this.newItem = value; 
      this.RaisePropertyChanged("NewItem"); 
     } 
    } 

private Item selectedItem; 

public Item SelectedItem 
      { 
       get 
       { 
        return this.selectedItem; 
       } 
       set 
       { 
        this.selectedItem= value; 
        this.RaisePropertyChanged("SelectedItem"); 

       } 
      } 

, was mache ich falsch (Save Befehlscode)? Danke.

+0

@Jonh Durch ein neues Objekt hinzufügen, ist die selectedItem immer null – Hicham4

Antwort

1

1) eine neue Schaltfläche in XAML

2) erstellen Sie einen neuen Befehl in UserVM Klasse erstellen (nennen wir es UpdateOrAddNew Befehl) und verbinden sie mit der Schaltfläche Eigenschaft mit "Command".

Weitere Informationen hierzu finden Sie unter So binden Sie die WPF-Schaltfläche an einen Befehl in ViewModelBase?

3) Überprüfen Sie im Befehlszeilenprogramm UpdateOrAddNew, ob SelectedUser null ist (erstellen Sie dann einen neuen Benutzer) oder aktualisieren Sie den vorhandenen, falls er nicht null ist.

Um Auto des TextBox-Problems zu nehmen, müssen Sie einen Wrapper erstellen, der immer Informationen enthält.

Fügen Sie diese auf Ihre UserVM:

public User UserRecord 
{ 
    get 
    { 
     if(userRecord == null) 
     return userRecord = new User(); 
    } 
    set 
    { 
     userRecord = value; 
     onPropertyChanged("UserRecord"); 
    } 
} 

jetzt müssen Sie Ihre Textfelder ändern gegen UserRecord zu binden, statt SelectedUser.

und ändern Sie Ihre SelectedUser:

public User SelectedUser 
{ 
    get { return selecteduser; } 
    set 
    { 
     selecteduser = value; 
     onPropertyChanged("SelectedUser"); 

     UserRecord = selecteduser; 
    } 
} 
+0

Warum Sie ** ** zwei Eigenschaften brauchen? Warum nicht nur einer? –

+0

@ Mike Eason. Bitte, wenn Sie eine Lösung im Zusammenhang mit Ihrer Frage haben, erklären Sie es. – Hicham4

Verwandte Themen