Я делаю страницу, используя шаблон MVVM.

Кстати, у меня возник вопрос во время реализации команды. Это «Правильно ли отправить командный параметр в управление пользовательского интерфейса»?

Например, у меня есть элемент управления TextBox. При возникновении события LostFocus будет сгенерирована команда проверки, связанная с TextBox, и я отправлю элемент управления пользовательского интерфейса в качестве параметра команды для отображения сообщения об ошибке проверки.

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

Это мой сценарий.

Но я знаю, что модель представления не должна напрямую ссылаться ни на одно из представлений и элементов управления.

Пожалуйста, дайте мне знать, как.

0
YH Kim 24 Апр 2017 в 12:17

2 ответа

Лучший ответ

Если ваша проверка выполняется в коде вашего представления / элемента управления, тогда вы можете отправить или передать элемент управления.

Мне нужно спросить, какой тип проверки выполняется на уровне пользовательского интерфейса - это может быть общая логика ввода (например, только цифры или только определенные буквы и т. Д.), Но она не должна включать какую-либо бизнес-логику. Ваш код может вызвать метод в модели представления для выполнения проверки на основе бизнес-логики, но он должен избегать передачи элемента управления.

Если вы просто ищете способ сделать общий метод проверки для нескольких элементов управления, то вам следует рассмотреть другой способ, такой как:

  • создание пользовательского элемента управления, который имеет проверку
  • используя прикрепленное поведение
1
slugster 24 Апр 2017 в 09:27

Модель представления не должна иметь никаких ссылок или каких-либо зависимостей от какого-либо элемента управления пользовательского интерфейса, такого как TextBox.

Вместо передачи ссылки на TextBox в качестве параметра команды для команды модели представления, вы должны либо передать значение свойства Text TextBox в виде string аргумент или, что еще лучше, вы должны просто связать свойство Text TextBox со свойством источника string модели представления:

<TextBox Text="{Binding YourViewModelProperty}" />

Свойство source будет установлено, когда TextBox потеряет фокус, и вы можете легко отключить логику проверки в установщике:

private string _s;
public string YourViewModelProperty
{
    get { return _s; }
    set { _s = value; Validate(); }
}

Вот как предполагается реализовать шаблон MVVM.

1
mm8 24 Апр 2017 в 10:45