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
Du hast doch eine Instanz einer Person, die du als DataContext gesetzt hast. Diese Person kannst du ganz einfach zur Liste hinzufügen.
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?
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;
}
Schöner wäre es erst gar nicht so zu machen sondern gleich MVVM anzuwenden.
Schöner wäre es erst gar nicht so zu machen sondern gleich MVVM anzuwenden.
Passend dazu: [Artikel] MVVM und DataBinding