Как сфокусировать и выделить текст в текстовом поле из ViewModel

StackOverflow https://stackoverflow.com/questions/930828

  •  06-09-2019
  •  | 
  •  

Вопрос

Я экспериментирую с MVVM в контексте простого приложения WPF.У меня есть команда, прикрепленная к кнопке.Если текст в текстовом поле "неправильный", я хочу, чтобы текстовое поле получило фокус и все его содержимое было выделено.Кажется, единственный способ сделать это - либо через какой-то прямой вызов команды в моей ViewModel для представления, либо настроить какое-то событие, которое запускает ViewModel и прослушивает View.Оттуда представление может выполнять прямые вызовы соответствующего текстового поля.

Я пытаюсь оставаться в рамках несвязанной природы MVVM, но, похоже, я никак не могу получить это поведение декларативно в XAML или в коде непосредственно в ViewModel, по крайней мере, косвенно не обращаясь к представлению (либо к интерфейсу, либо к событию).Мне также пришлось бы хранить ссылку на представление в ViewModel.

Что здесь можно было бы считать "наилучшей практикой" и насколько на самом деле должны быть отделены представления от ViewModels в "реальных" приложениях MVVM?

Это было полезно?

Решение

Это код, который напрямую привязан к элементам управления вашего пользовательского интерфейса, поэтому я думаю, что в данном случае код представления находится там, где ему и место.Возможно, вы захотите настроить событие или что-то в этом роде.Таким образом, он по-прежнему так же развязан, как и раньше - представление в любом случае знает о viewmodel, у вас просто есть еще несколько строк кода в коде за ним.

Другие советы

я столкнулся с такой же проблемой, что я сделал, это создал настраиваемое текстовое поле и предоставил свойство зависимости из этого элемента управления.

Подобно focus, выберите alltext и привяжите эти свойства к view model.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top