2009-05-30 6 views
0

Ich experimentiere mit MVVM im Kontext einer einfachen WPF-App. Ich habe einen Befehl an eine Schaltfläche angehängt. Wenn der Text in einer TextBox "falsch" ist, möchte ich, dass die TextBox den Fokus erhält und alle Inhalte ausgewählt werden. Es scheint, dass der einzige Weg, dies zu tun, entweder durch eine Art direkten Aufruf vom Command in meinem ViewModel an die View ist, oder durch das Einrichten einer Art von Event, die das ViewModel auslöst und auf die View wartet. Von dort aus kann die Ansicht direkt auf die betreffende TextBox zugreifen.Wie Sie Text in einem TextBox von ViewModel konzentrieren und auswählen

Ich versuche, innerhalb der entkoppelten Natur von MVVM zu bleiben, aber es scheint, als ob ich dieses Verhalten nicht deklarativ in XAML oder in Code direkt im ViewModel bekommen kann, ohne zumindest indirekt mit der View zu sprechen eine Schnittstelle oder Eventing). Ich müsste auch einen Verweis auf die Ansicht im ViewModel halten.

Was wäre hier eine 'Best Practice', und wie entkoppelt sollten Views eigentlich in 'echten' MVVM-Anwendungen von ViewModels sein?

+0

http://stackoverflow.com/questions/1356045/set-focus-on-textbox-in-wpf-from-view-model-c-wpf – gschuager

Antwort

1

Es ist Code, der direkt an die Steuerelemente Ihrer Benutzeroberfläche gebunden ist, also denke ich, in diesem Fall ist der Code-Behind der Ansicht, wo es hingehört. Vielleicht möchten Sie ein Ereignis oder etwas Ähnliches einrichten. So ist es immer noch so entkoppelt wie zuvor - der View kennt das Viewmodel sowieso, du hast nur noch ein paar Codezeilen im Code-Behind.

+0

Ich stimme zu. Da das Problem in der Benutzeroberfläche wirklich visuell ist, scheint es in der Ansicht zu sein. Für mich ist Xaml IS-Code, nur wirklich schwer zu lesen ... Ein kleiner Code in der Ansicht, um etwas Text auszuwählen, versteckt hinter irgendeiner Schnittstelle, die verspottet werden kann, oder ein Ereignis scheint im Vergleich zu dem Versuch, eine Abhängigkeitseigenschaft zu riggen. Die Eigenschaften focus und selectalltext im ViewModel scheinen rückwärts zu liegen, da diese Dinge überhaupt keinen 'Blick auf das Modell' geben. Zu viele Reifen, nur um durcheinander zu sein und mehr Verwirrung bezüglich der Trennung von Verantwortlichkeiten. – deep108

0

Ich habe das gleiche Problem, was ich tat, ist ein benutzerdefiniertes Textfeld gemacht und Abhängigkeitseigenschaft von diesem Steuerelement ausgesetzt.

Wie Fokus, wählen Sie alltext und binden Sie diese Eigenschaften, um das Modell anzuzeigen.