Danke für die Antwort. Jetzt habe ich meine Nachricht erneut gelesen, ich sehe, dass sie ziemlich vage ist. Ich habe einen Bildschirm, der ein Objekt bearbeitet, das mehrere Listen anderer untergeordneter Objekte enthält. Ich habe diese als verschiedene Registerkarten in einem Tab-Steuerelement implementiert. Eine dieser Registerkarten bearbeitet die Kommentare. Daher wollte ich eine Liste von Kommentaren mit einem Bearbeitungsfeld für die aktuelle Auswahl neben der Liste anzeigen. Der Benutzer könnte dann Schaltflächen hinzufügen, bearbeiten oder löschen verwenden, um die Liste zu aktualisieren. Ich wollte das auf eine reine (ish) MVVM-Art machen.
Ich kam mit dem folgenden Design, das mit minimalen Hacks zu arbeiten scheint.
Die Ansicht enthält eine Liste der untergeordneten Objekte einfach als ListView, das an eine beobachtbare Sammlung innerhalb des ViewModel gebunden ist. Ich habe einen Child-Objekt-Puffer hinzugefügt - dieser wird verwendet, um Änderungen zu puffern, bis sie wieder in der Liste gespeichert (oder weggeworfen) werden können.
Die Ansicht enthält auch ein Bearbeitungsfenster, das an das Pufferobjekt im ViewModel gebunden ist. Der Puffer wird aktualisiert, wenn sich die aktuelle Auswahl der Listenansicht mit einer tiefen Kopie ändert. Ich habe versucht, Datenbindung für die Selecteditem-Eigenschaft zu verwenden, aber die Menge wurde nie aufgerufen. Daher wurde eine kleine CodeBehind-Methode hinzugefügt, um zu erzwingen, dass die Eigenschaft aktualisiert wird, wenn die Auswahl geändert wurde.
Die Listenansicht und Bearbeitungsansicht schließen sich gegenseitig aus. Theoretisch könnte man den Behinderten verstecken, vielleicht mit einem Flip-Screen. Als generelles Muster ist es für meine App besser, beide gleichzeitig sichtbar zu haben, da das Bearbeitungsfeld zusätzliche Informationen anzeigen kann, die in der Listenansicht nicht angezeigt werden. Die Auswahl, welches Fenster aktiviert wird, wird durch die Bindung von IsEnabled an eine ViewModel-Eigenschaft wie IsEditCommentMode gesteuert.
Befehle zum Verwalten der Liste müssen hinzugefügt werden, das sind Neu, Bearbeiten und Löschen. Beachten Sie, dass Add und Edit den Puffer einrichten und dann IsEditCommentMode auf true setzen. Diese Befehle zur Listenverwaltung sind nur verfügbar, wenn IsEditCommentMode den Wert false hat. Das Bearbeitungsbedienfeld implementiert Befehle zum Speichern und Abbrechen, sie werden nur aktiviert, wenn IsEditCommentMode den Wert true hat. Wenn Save ausgeführt wird, sollte es aus dem Puffer in die Liste kopieren (entweder hinzufügen oder aktualisieren) und die Änderungsbenachrichtigung auslösen. Schließlich sollte es IsEditCommentMode auf false festlegen.
Das alles funktioniert gut und scheint keine MVVM Tenents zu verletzen (in meiner bescheidenen aber oft fehlerhafte Meinung).