Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
MVVM Wer öffnet ein (Detail)Window?
reloop
myCSharp.de - Member

Avatar #avatar-3256.jpg


Dabei seit:
Beiträge: 139

Themenstarter:

MVVM Wer öffnet ein (Detail)Window?

beantworten | zitieren | melden

Hallo,

ich habe folgendes Frage:

Ich besitze ein MainViewModel welches an die MainWindow.xaml - Datei gebunden ist. Im MainWindow gibt es ein ContentControl das z.B. an ein AllAdressViewModel bindet - welches als DataTemplate eine AllAdrsView.xaml beinhaltet. (Diese View besitzt lediglich ein Grid zur Visualisierung der Daten.)

Nun möchte ich via. Doppelklick auf eine Zeile im Grid ein neues Window aufgehen lassen, wo die Detailinformationen zum Datensatz stehen. Das ist alles soweit kein Thema. Nur habe ich momentan die Instanzierung und den Aufruf des Windows im AllAdrsViewModel.

Ist dieser Weg richtig? Oder müsste ich folgenden Weg gehen:

AllAdrsViewModel -> Ruft Event von MainViewModel auf -> Ruft Event von MainWindow.xaml auf -> Instanziert und ruft DetailWindow auf.

Danke für eure Hilfe,
reloop
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von reloop am .
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 6.862
Herkunft: Esslingen

beantworten | zitieren | melden

Hallo,

hört sich erstmal blöd an, aber das Window sollte überhaupt nicht direkt im VM erstellt und geöffnet werden. Der Anwendungsfall ist in MVVM schon irgendwie blöd, deshalb geht man von extra Dialogen auch weg (hat auch Usability Vorteile).

Am besten schaust dir mal auf Codeplex an wie verschiedene MVVM Frameworks das machen. Bei Cinch heißen die z.B. UI Services. Bei allen Lösungen gehts darum das man nur sagt was für Fenster man öffnen will (das muss vorher registriert werden). Man selber muss dann gar nicht wissen was fürn Fenster das konkret ist. Alles andere würde ja die Trennung von View und ViewModel brechen.
Baka wa shinanakya naoranai.

Mein XING Profil.
private Nachricht | Beiträge des Benutzers
ProGamer
myCSharp.de - Member



Dabei seit:
Beiträge: 660
Herkunft: NRW

beantworten | zitieren | melden

Hallo,

Also ich würde das Folgendermaßen lösen

ein ChildWindow erstellen, dessen CodeBehind erweitern


public DetailsChildWindow(IDetailsChildWindow ViewModel)
{
InitializeComponents();

this.Loaded += (s,e) =>
{
this.DataContext = ViewModel
};
}

dann ein passendes ViewModel erstellen


public Class DetailsChildWindowViewModel : IDetailsChildWindow
{
public DetailsChildWindowViewModel(object SelectedItem)
{
//Aktionen ausführen um Details des Items anzuzeigen
}
}

und um auf das DoppelClick reagieren zu können bietet sich ein EventsToCommand an auf dass du dann reagieren kannst.


Aber Vielleicht würde eine Master/Detail Ansicht dir ja genügen
MfG
ProGamer
private Nachricht | Beiträge des Benutzers
xxMUROxx
myCSharp.de - Member

Avatar #avatar-3236.jpg


Dabei seit:
Beiträge: 1.552
Herkunft: Südtirol/Italien

beantworten | zitieren | melden

Hallo reloop,

welches MVVM Framework verwendest du. Falls Cinch, dann hilft dir folgender Link weiter WPFUIVisualizerService (srolle ca auf 1/2 dort ist besagtes Beispiel). In MVVM solltest du nie GUI Elemente in den ViewModel erstellen.

Gruß
Michael
Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp
private Nachricht | Beiträge des Benutzers