Фокус MVVM к текстовому полю

Как я установил бы фокус на a TextBox не указывая название этого TextBox? В данный момент я делаю следующее

<Window FocusManager.FocusedElement="{Binding ElementName=Username}">
    <Grid>
        <TextBox Text="{Binding Username}" Name="Username" />            
    </Grid>
</Window>

Есть ли любой способ сделать это, не указывая Название TextBox. Как я полагаю в MVVM, наличие элемента Имени обычно означает плохой дизайн?

10
задан Dave Clemmer 6 August 2013 в 03:50
поделиться

2 ответа

Я задокументировал "чистый MVVM" способ сделать это в моем ответе на похожую проблему. Решение включает использование прикрепленных свойств и фреймворка для передачи команд интерфейса из ViewModel обратно в View.

4
ответ дан 3 December 2019 в 14:18
поделиться

Поскольку я верю в MVVM, наличие элемента Name обычно означает плохой дизайн?

Нет, это не так.

Паттерн MVVM - это не устранение всего кода из code-behind файлов.

Речь идет о разделении проблем и повышении тестируемости. Код, связанный с представлением, например, обработка фокуса, должен оставаться в code-behind файле представления. Но было бы плохо видеть логику приложения или управление подключением к базе данных в code-behind файле представления.

Примеры MVVM с кодом в code-behind файлах без нарушения паттерна MVVM можно найти в проекте WPF Application Framework (WAF) .

22
ответ дан 3 December 2019 в 14:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: