Как я установил бы фокус на a TextBox
не указывая название этого TextBox
? В данный момент я делаю следующее
<Window FocusManager.FocusedElement="{Binding ElementName=Username}">
<Grid>
<TextBox Text="{Binding Username}" Name="Username" />
</Grid>
</Window>
Есть ли любой способ сделать это, не указывая Название TextBox
. Как я полагаю в MVVM, наличие элемента Имени обычно означает плохой дизайн?
Я задокументировал "чистый MVVM" способ сделать это в моем ответе на похожую проблему. Решение включает использование прикрепленных свойств и фреймворка для передачи команд интерфейса из ViewModel обратно в View.
Поскольку я верю в MVVM, наличие элемента Name обычно означает плохой дизайн?
Нет, это не так.
Паттерн MVVM - это не устранение всего кода из code-behind файлов.
Речь идет о разделении проблем и повышении тестируемости. Код, связанный с представлением, например, обработка фокуса, должен оставаться в code-behind файле представления. Но было бы плохо видеть логику приложения или управление подключением к базе данных в code-behind файле представления.
Примеры MVVM с кодом в code-behind файлах без нарушения паттерна MVVM можно найти в проекте WPF Application Framework (WAF) .