Laden...

MVVM Wer öffnet ein (Detail)Window?

Erstellt von reloop vor 12 Jahren Letzter Beitrag vor 12 Jahren 898 Views
reloop Themenstarter:in
139 Beiträge seit 2010
vor 12 Jahren
MVVM Wer öffnet ein (Detail)Window?

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

6.862 Beiträge seit 2003
vor 12 Jahren

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.

P
660 Beiträge seit 2008
vor 12 Jahren

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*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

1.552 Beiträge seit 2010
vor 12 Jahren

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