Wir haben viele unveränderliche Wertobjekte in unserem Domänenmodell, ein Beispiel dafür ist eine Position, die durch eine Breite, Länge & Höhe definiert ist.Wie kann ich unveränderliche Objekte in WPF bearbeiten, ohne Code zu duplizieren?
/// <remarks>When I grow up I want to be an F# record.</remarks>
public class Position
{
public double Latitude
{
get;
private set;
}
// snip
public Position(double latitude, double longitude, double height)
{
Latitude = latitude;
// snip
}
}
Der offensichtliche Weg Bearbeitung von einer Position zu ermöglichen, ist eine Ansichtsmodell zu bauen, die Getter und Einrichter, sowie eine ToPosition() Methode der validierte unveränderliche Position Instanz zu extrahieren, aufweist. Obwohl diese Lösung in Ordnung wäre, würde sie viel doppelten Code ergeben, insbesondere XAML.
Die fraglichen Wertobjekte bestehen aus drei bis fünf Eigenschaften, die in der Regel einige Varianten von X, Y, Z & Hilfsteilen sind. In Anbetracht dessen hatte ich überlegt, drei ViewModels zu erstellen, um die verschiedenen Möglichkeiten zu behandeln, wobei jedes ViewModel Eigenschaften für den Wert jeder Eigenschaft sowie eine Beschreibung für jedes Etikett (z. B. "Latitude") verfügbar machen müsste.
Weiter geht es, als ob ich es zu einem allgemeinen ViewModel vereinfachen könnte, das mit N Eigenschaften umgehen und alles durch Reflektion verbinden kann. So etwas wie ein Eigenschaftsraster, aber für unveränderliche Objekte. Ein Problem mit einem Eigenschaftenraster ist, dass ich möchte in der Lage sein, um das Aussehen zu ändern, so dass ich Etiketten und Textfelder haben kann wie zum Beispiel:
Latitude: [ 32 ] <- TextBox
Longitude: [ 115 ]
Height: [ 12 ]
oder legen Sie sie in einem Datagrid wie:
Latitude | Longitude | Height
32 115 12
Also meine Frage ist:
Können Sie an eine elegante Möglichkeit denken, dieses Problem zu lösen? Gibt es Bibliotheken, die das machen oder Artikel über etwas Ähnliches?
ich in erster Linie bin auf der Suche nach:
- Code-Duplizierung zu
- leicht minimiert werden, um neue Wert Objekttypen
- Mögliche mit irgendeiner Art von Validierung zu verlängern hinzufügen
Dies ist eine nette Lösung, ich bevorzuge es zu Pauls, da es weniger Boilerplate gibt. Natürlich könnten Sie auch Reflektion in seiner Lösung verwenden, um den Programmieraufwand beim Zuordnen von Eigenschaften zum Wörterbuch zu reduzieren. Es gibt tatsächlich keine akzeptierte Antwort, weil ich das Problem auf eine andere Weise gelöst habe und Pauls Antwort 6 Monate oder später nicht bemerkt hatte, nachdem ich die Frage ursprünglich gestellt hatte. Wenn Sie ein praktikables Code-Snippet anbieten würden, das die Leute einfach verwenden könnten, werde ich dies als akzeptierte Antwort markieren. –