Tengo una vista que tiene un solo TextBox
y un par Button
s debajo. Cuando se carga la ventana, quiero que TextBox
tenga foco.WPF MVVM Focus Field on Load
Si no estuviera usando MVVM, simplemente llamaría al TextBox.Focus()
en el evento Loaded. Sin embargo, mi ViewModel no sabe acerca de mi vista, ¿cómo puedo lograr esto sin poner código en el código detrás de mi vista?
EDIT: Después de leer las respuestas que decidí poner este código en la vista XAML
<DockPanel FocusManager.FocusedElement="{Binding ElementName=MessageTextBox}">
<TextBox Name="MessageTextBox" Text="{Binding Message}"/>
</DockPanel>
Si esto fuera distinta de la página enfoque inicial que probablemente recomendaría la respuesta de Jon Galloway, ya que puede ser controlado de cualquier cosa el ViewModel.
Eso es exactamente lo que estaba buscando. Creo que este código pertenece a la vista y, por alguna razón, me gusta más en el xaml que en el código subyacente. –
La sugerencia de Galloway le permite controlar el enfoque desde ViewModel ... también puede examinarlo de cerca. –
Después de leer algunas de las otras respuestas, no estoy seguro de que el código pertenezca a ViewModel. Parece estar directamente relacionado con la vista. Si tuviera una página más compleja que estuviera moviendo el foco en realidad, bastaría en otros eventos que probablemente tendrían sentido. Dicho esto, sigue siendo un buen truco para tener. –