Laden...

DataContext in ein neues Fenster übergeben und einer Liste hinzufügen

Erstellt von Kriz vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.520 Views
K
Kriz Themenstarter:in
141 Beiträge seit 2017
vor 7 Jahren
DataContext in ein neues Fenster übergeben und einer Liste hinzufügen

Guten Morgen...

ich bin noch recht neu im Thema WPF und habe daher eine Frage...

Ich habe ein WPF Fenster, wessen Datacontext die Klasse Person hat. In diesem Fenster habe ich mehrere Textboxen welche mittels Binding an die verschiedenen Werte der Klasse Peron gebunden sind. Wenn ich nun dieses WPF Fenster erstelle mit einer vorhandenen Person werden die Werte (Name, Vorname, was auch immer) angezeigt. Wenn ich das Fenster mit einer New Person anzeige sind die Textfelder logischerwese leer. Wenn ich nun auf einen Button clicke, dann möchte ich, dass ein neues Objekt vom Typ Person, mit den eingetragenen Werten in den Textboxen, erstellt wird und einer List<Person> hinzugefügt wird.
Im Moment löse ich das mit

Person NeuePerson = new Person()
{
     Name = txtName.Text,
     Vorname = txtVorname.Text
}
ListePersonen.Add(NeuePerson);

Es funktioniert und erfüllt den Zweck, allerdings sollte es doch möglich sein, das Zuweisen der Werte vom DataContext bzw Binding übernehmen zu lassen...
Also, ist es möglich und wenn ja wie 😃

Vielen Dank für Eure Hilfe!!

Kriz

1.040 Beiträge seit 2007
vor 7 Jahren

Du hast doch eine Instanz einer Person, die du als DataContext gesetzt hast. Diese Person kannst du ganz einfach zur Liste hinzufügen.

K
Kriz Themenstarter:in
141 Beiträge seit 2017
vor 7 Jahren

Ich habe ja den DataContext mit einer New Person zugewiesen (also DataContext = New Person()), wenn ich dann versuche meiner Liste den DataContext hinzuzufügen (mit ListePersonen.Add(DataContext) bekomme ich den Fehler dass DataContext ein Objekt ist und nicht in Person konvertiert werden kann...
Wie ist es sonst möglich?

1.040 Beiträge seit 2007
vor 7 Jahren

Naja, du weißt dann ja, dass der DataContext prinzipiell vom Typ Person ist, also könntest du casten.
[FAQ] Casten aber richtig: () / is / as
Ändert sich der DataContext auf einen anderen Typ, funktioniert die Variante natürlich nicht mehr.

Schöner ist es, wenn du dir die erstellte Person in einem Feld merkst, dann kannst du später damit arbeiten.

private Person _currentPerson;

Konstruktor()
{
    _currentPerson = new Person();
    DataContext = _currentPerson;
}
F
10.010 Beiträge seit 2004
vor 7 Jahren

Schöner wäre es erst gar nicht so zu machen sondern gleich MVVM anzuwenden.

1.040 Beiträge seit 2007
vor 7 Jahren

Schöner wäre es erst gar nicht so zu machen sondern gleich MVVM anzuwenden.

Passend dazu: [Artikel] MVVM und DataBinding

K
Kriz Themenstarter:in
141 Beiträge seit 2017
vor 7 Jahren
Erledigt

p!lle, vielen Dank, den Denkanstoss habe ich gebraucht!

Kriz