| 

.NET C# Java Javascript Exception

2
Ich möchte in Silverlight den Fokus aus dem ViewModel heraus setzen. Dadurch muss entweder das ViewModel direkt das Steuerelement der View ansprechen oder es wird aus dem ViewModel eine entsprechende Methode im CodeBehind der View angesprochen.
Beides entspricht nicht dem MVVM-Pattern.
Gibt es eine Lösung per Binding?
Ich habe lediglich folgenden Artikel gefunden, der mir nicht besonders zusagt: Setting focus in XAML with no code

Nachschlag:
Realisiert hätte ich gerne XAML wie folgt:
<TextBox x:Name="MyTextBox1" HasFocus="{Binding MyTextBox1HasFocus, Mode=TwoWay}"></TextBox>
13.09.2011
Jürgen Luhr 7,1k 2 9
2 Antworten
1
Ich dachte im ersten Moment an eine AttachedProperty oder ein Behaviour. Damit ermöglichst Du Dir wieder die Bindings. Hab auf die Schnelle bei stackoverflow.com ein FocusBehaviour gefunden, vielleicht hilft Dir das als Ansatzpunkt weiter.
Viel Erfolg,
Florian
13.09.2011
ffordermaier 8,4k 3 9
Das werde ich testen. Danke für den Link.
Jürgen Luhr 13.09.2011
Der Link hat mir weitergeholfen. Vielen Dank.
Jürgen Luhr 19.09.2011
0
Also ich bin nicht so ein MVVM-Purist, dass ich etwas gegen ein IView-Interface hätte mit einer Methode SetFocus() darin.

Die Frage ist ja auch, wie genau Du den Fokus steuern willst. Letztlich geht es ja hier um Controls. Je genauer das ViewModel vorgeben kann, welches Control den Fokus bekommen soll, desto mehr weiß das ViewModel auch über die View, und das wäre ganz bestimmt nicht im Sinne von MVVM.

Eine Lösung dafür könnte sein, dass das VM einen Enum "FocussableInput" definiert mit Werten, die aus ViewModel-Sicht, also eher abstrakt/fachlich, die fokussierbaren Felder repräsentieren. Und dann hast Du im VM entweder eine Property (mit INotifyPropertyChanged natürlich), die den jeweils aktuell gültigen Fokus repräsentiert, oder Du gibst das als Parameter einer SetFocus-Methode mit. In beiden Fällen würde die Asuwertung und "Übersetzung" in konkrete Control-Manipulation im Code-Behind der View stattfinden. Oder Du verwendest statt des Enums Strings mit den Property-Namen Deines VM und der Konvention, dass das an die jeweilige Property gebundene Feld fokussiert werden soll. Dann wäre vielleicht auch eine generische Lösug denkbar.

Ist vermutlich nicht genau das, was Du Dir vorstellst. Für wichtig halte ich aber eben, erst mal Klarheit darüber zu gewinnen, in welcher "Sprache" das VM überhaupt ausdrücken können soll, wo der Fokus hinkommt.
13.09.2011
Matthias Hlawatsch 13,2k 4 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH