7 Stimmen

MVVM - Wie öffne ich ein Fenster basierend auf einem ausgewählten Element aus einer Liste?

Ich bin ziemlich neu in der WPF & MVVM Welt und habe die letzten Tage damit verbracht, so viele Tutorials wie möglich herunterzuladen und so viel wie möglich zu lesen!

Ich habe jedoch Schwierigkeiten, ein sehr grundlegendes und häufiges Konzept mit MVVM umzusetzen und bin verzweifelt nach Hilfe - vielleicht sogar nach einem Beispiel :-)

Ich habe die Grundlagen von M-V-VM, Commanding und sogar Messaging verstanden; aber wie zum Teufel öffne ich ein neues Fenster und setze das ViewModel dieses Fensters auf das ausgewählte Element einer ListBox?

Lassen Sie mich erklären: Ich habe ein Modell namens Client und es hat einige Eigenschaften Dann habe ich ein ViewModel, das alle meine Clients abruft und in einer ObservableCollection speichert Ich habe einen Bildschirm, auf dem ich den Namen und Nachnamen in einer ListBox anzeige und es dem Benutzer ermögliche, zu filtern und zu suchen.

All das oben Genannte funktioniert einwandfrei.

Wenn ein Benutzer jedoch ein Element auswählt, möchte ich einen bearbeitbaren "detaillierten Client-Ansichts" Bildschirm dieses bestimmten Clients öffnen. Das ViewModel dieses detaillierten Bildschirms müsste irgendwie an das ausgewählte Element binden (wenn das Sinn macht); oder ich muss in der Lage sein, einen Parameter an das ViewModel des neu geöffneten Bildschirms zu übergeben. Tatsächlich wäre es großartig, wenn der Benutzer mehrere Detailbildschirme gleichzeitig öffnen und mehrere Clients bearbeiten könnte!

Wenn mir jemand ein nettes Beispiel geben kann oder mich in die richtige Richtung weisen kann, wäre ich wirklich dankbar!

Vielen Dank, Brendan

2voto

Rachel Punkte 126340

Ich würde ein Ereignis zum ListBox.SelectionChanged hinzufügen, das folgendes macht:

  • Erstellt einen neuen Dialog und DialogViewModel
  • Bindet das DialogViewModel.EditableContentProperty an das ausgewählte Element des Listbox
  • Dialog.DataContext = DialogViewModel
  • Dialog.ShowDialog()

2voto

Brendan Punkte 1237

Einfach ausgedrückt:

//Erstellen Sie das Formular für die Client-Details
frmClientDetails frm = new frmClientDetails();
frm.Owner = this;
var ViewModel = new ClientDetailViewModel((Client)lstFoundClients.Items.CurrentItem);
frm.DataContext = ViewModel;
frm.Show();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X