Frage

Ich dachte, ich würde hier posten in der Hoffnung, dass vielleicht jemand mit MVVM Know-how zu bieten Meinungen zu der Lage wäre, ob die folgende ist eine gute Idee:

Ich bin mit Sacha Barbers Cinch MVVM Rahmen, der Marlon Grech SimpleCommand Klasse umfasst.

Eine Sache, diese Klasse nicht der hat einige andere Alternativen haben, ist eine Text-Eigenschaft, die häufig zu binden UI-Elemente an den ‚Titel‘ des Befehlsbetriebes verwendet werden kann. Folglich habe ich zu dieser Klasse eine Erweiterung geschrieben, die eine Text-Eigenschaft verfügbar macht.

Nun, was ich laufe in ist ein Anwendungsfall, wo ich einen Befehl bin mit zu einem Gerät wechseln Konnektivität. Es gibt eine Reihe von verschiedenen Möglichkeiten, wie ich implementieren könnte dies (nicht immer - es ist Software). Eine Möglichkeit wäre, um mehrere Befehlsobjekte von meinem Viewmodel aussetzen - eine für ‚Disconnect‘ und eine für ‚Connect; haben die Ansicht Modell eine Eigenschaft belichten, die entweder den Befehl Verbinden oder Trennen Befehl an den Verbindungszustand (IsConnected) und hat die Ansicht bedingt binden anzeigt. Meine Reaktion auf diese Option aber ist ... igitt!

Was zunächst fange ich an, statt der Suche wurde nicht nur eine Text-Eigenschaft bereitstellt, sondern mit auch dem Objekt Befehl implementieren INotifyPropertyChanged, so dass die Text-Eigenschaft kann dynamisch durch das Viewmodel zu ‚Connect‘ geändert werden, oder ‚Disconnect‘ nach Systemzustand. Dadurch kann ich mehrere Befehle mit vermeiden und nur ein einziges ‚ToggleConnection‘ Befehl Objekt aus.

Starten auf diesem Weg aber es fällt mir ein, dass es noch andere Variationen dieses Musters sein kann, wobei die Benutzeroberfläche geändert werden muss nach Befehlszustand. Zum Beispiel, zusätzlich den Befehl des Textes nach Verbindungszustand zu ändern, können Sie die Orte, wo ein Symbol nach Verbindungszustand geändert werden muss. Also begann ich eine ‚Stateful‘ Klasse schreiben, die implementiert INotifyPropertyChanged, und stellt zwei Eigenschaften - ‚Text‘ und ‚Staat‘. Ich habe die Klasse generic so gemacht, dass die Art des Staates kann vom Benutzer definiert werden (Ich ziehe es in der Regel nicht zu verwenden ‚Objekt‘, wo vermeidbar).

Die Frage, die ich habe, ist ... Glaubst du, das ist eine gute oder schlechte Idee? Es kann von der ursprünglichen Absicht / Design von Befehlen divergierend werden; Von dem, was ich im Allgemeinen gesehen habe kann der Fall sein, dass Befehlsobjekte staatenlos sein bestimmt waren, als sie die ‚Verben‘ des Systems sind. Mit gerouteten Befehlen, wenn ich die Dinge richtig verstehe nur das Ziel des Befehls würde in der Regel zu erwarten Zustand haben. Insbesondere könnte, da der gleiche Befehl an verschiedene Handler weitergeleitet werden, je nachdem, wo Befehlsbindungen deklariert.

Also, ich denke, dass mit gerouteten Befehlen zumindest Zustand würde keinen Sinn machen.

Aber ich bin nicht mit gerouteten Befehlen zu tun - ich bin mit MVVM Befehlen speziell zu tun. In diesem Fall gibt es im Grunde kein bedingtes Routing von Befehlen - die MVVM Ansichten binden direkt an einen Befehl Objekte des bestimmten Ansichtsmodell und es ausführen und CanExecute Handler

.

In diesem Fall macht es Sinn?

Ich habe eine Kopie des Codes in Frage angebracht, falls es der Verwendung / Interesses.

Danke, Phil

War es hilfreich?

Lösung

Es ist wirklich an Ihnen, was Sie denken, wäre einfacher, mit zu arbeiten.

Ich lege persönlich nicht die .Text Eigenschaft auf meine Befehle, nur weil ich aus diesen Befehlen keine Wiederverwendung erhalten. Es ist anders mit dem RoutedUICommands im Rahmen (oder ähnlichen benutzerdefinierten statischen Befehlen) zur Verfügung gestellt, weil sie überall wiederverwendet werden, und wenn die Übersetzung von „Exit“ auf diesem Befehl zu ändern, wäre es in der gesamten Anwendung widerspiegelt. Dies ist nicht der Fall in Ihrem Beispiel -. Alles einmalig sein würde

In Ihrem Fall dieser Text Ihrer Schaltfläche Text wird wirklich von Ihrem Befehl entkoppelt (auch wenn man wirkt sich auf die andere) und so ist es wahrscheinlich gehen, um am Ende leichter zu sein und etwas weniger Code, sie zu entkoppeln, aber der Unterschied isn‘ t, dass viel zu gehen, und es wird als alles, was sein Geschmackssache am Ende mehr.

Ich bin auf jeden Fall mit Ihnen auf dem 2, was Befehle - blech. Die meisten Button-Delegierten Geschriebene wird in den Zustand in irgendeiner Weise reagieren (Service, den Sie zu sprechen ist nach unten, diese Daten braucht auf diese Weise aufgefüllt werden, wenn der Benutzer diese Option aktiviert, etc.), so dass ich nicht wirklich glaube, es ist falsch zu haben die Vertreter der Stateful-Informationen über das Ansichtsmodell anzupassen.

Wie auch immer, das ist ein bisschen wortreich ... die Take-away ist "tun, was sich wohl fühlt".

Andere Tipps

Wie das letzte Plakat sagte: „Was auch immer fühlt sich wohl.“

In meinem Fall verwende ich in der Regel so etwas wie die DelegateCommand . Wenn ich auf bestimmte Daten zu binden müssen, ich binden an die VM. Wenn der Befehl ausgeführt wird, sein in meinem VM (über die Delegierten den DelegateCommand bei init zur Verfügung gestellt) ausgeführt. Dann wird die ausgeführt Delegierten können / maynot einig wieder verwendbaren Code den Befehl zu erfüllen.

Es klingt wie Sie den Befehl als seine eigene VM verwenden möchten. Ich hätte nie gedacht, das vor mir zu tun, aber wenn es gut für Sie fühlt sich, tun Sie es! :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top