2009-06-29 10 views
1

I MVVM mit Probe erstellt von Josh Smith am Lernen bei http://msdn.microsoft.com/en-us/magazine/dd419663.aspx ich eine Funktionalität von Update in dem vorhandenen Code,MVVM neuen Arbeitsbereich aus anderem Arbeitsbereich zu öffnen (statt Hauptcontrolpanel)

Wie hinzufügen wollte, wenn der Benutzer sieht Daten auf dem Raster von 'Alle Kunden' Benutzer kann bestimmte Datensätze durch Doppelklick bearbeiten, Doppelklick öffnet neue Registerkarte (gleiche Ansicht/Viewmodel, die für neue Kunden verwendet wird). Ich habe keine Ahnung, wie ich es machen soll, muss ich es über das Hauptfenster aufrufen oder es gibt einen anderen Weg.

Thank You All and Happy

Gaurav Joshi Programmierung

Antwort

1

Es ist ein bisschen beteiligt, so wollen wir es auf einmal eine Sache nehmen:

Das erste, was Sie tun müssen, ist das zu lassen, Modell anzeigen, welches Element ausgewählt ist. Um dies zu tun, müssen Sie eine IsSelected Eigenschaft an den Kunden hinzuzufügen

public bool IsSelected { get; set; } 

(Edit: Wie mich darauf hingewiesen wurde, hat die CustomerViewModel Klasse bereits diese Eigenschaft, so dass die oben ist nicht erforderlich, Dieses spezielle Projekt - obwohl es im Allgemeinen ist.

Sie müssen dann die IsSelected-Eigenschaft auf die Elemente in der ListView Databind. Ein Weg, dies zu tun, ist durch einen Stil, der den Kunden anspricht. Etwas wie folgt aus:

<Style x:Key="CustomerListStyle" TargetType="{x:Type ListViewItem}"> 
    <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" /> 
</Style> 

Dann diesen Stil zuweisen die ItemContainerStyle des Listview mit:

<ListView ItemContainerStyle="{StaticResource CustomerListStyle}" ...> 

Um einen ausgewählten Kunden zu bearbeiten, sollten Sie eine EditCostumer Befehl AllCustomersViewModel hinzuzufügen. Implementieren Sie diesen Befehl mithilfe von RelayCommand, um die Bearbeitungsansicht für das ausgewählte Element anzuzeigen.

Sie können LINQ verwenden, um den Kunden mit IsSelected == true zu finden.

+0

Hallo Mark, Vielen Dank für Ihren Beitrag und Entschuldigung, ich schreibe in Kommentaren, fand keine andere Möglichkeit auf Stackoverflow zu antworten. Denkst du, es ist in Ordnung, "workspace" in customerviewmodel it static zu deklarieren und einen neuen Befehl zu erstellen, der einen neuen Arbeitsbereich erstellt und ihn dem mainwindowviewmdodel-Arbeitsbereich hinzufügt. Auf diese Weise muss ich nicht implementieren. Ich möchte nur einige Experteneingaben Vielen Dank Gj – Gaurav

+0

Im Allgemeinen versuche ich, so weit wie möglich von der Statik wegzubleiben, da es dazu neigt, Testbarkeit, Flexibilität und nur allgemeine OO-Ness zu verletzen. Der ganze Sinn von ViewModels ist, dass sie Views modellieren. Sie können kein Modell pro Ansicht verwenden, wenn keine Instanzen des Modells vorhanden sind. Es mag sein, dass es sowieso nur einen Workspace gibt, aber genauso würde ich sagen, dass die Verwendung von Statik gegen die ganze Philosophie von MVVM verstößt. Ich weiß, dass meine Argumentation ein bisschen vage klingt, aber das sind nur allgemeine Überlegungen basierend auf jahrelanger Erfahrung :) –

+1

Mark. Das einzige Problem, das ich in Ihrer Antwort sehe, ist, dass Sie empfehlen, die IsSelected-Eigenschaft in das Kundenmodell einzufügen. Ich denke, es sollte in der CustomerViewModel-Klasse gehen, weil es eine GUI-orientierte Eigenschaft ist, und ein Customer Model-Objekt hat wirklich kein Konzept dessen, was ausgewählt wird bedeutet. –

Verwandte Themen