Я использую инструментарий MVVM Light (который я люблю).В настоящее время у меня есть сообщения для некоторых взаимодействий, происходящих из ViewModel и предназначенных для потребления представлением.Обычно сообщения такого типа указывают, что представление должно что-то делать, например скрывать себя, показывать подтверждающее сообщение о сохранении данных и т. Д.
Это работает.В конструкторе для View я регистрируюсь в Messenger:
Messenger.Default.Register<NotificationMessage<PaperNotification>>(this, n => HandlePaperNotification(n));
Когда я использую Messenger для передачи сквозных вопросов между ViewModel (например, идентификацией), я вижу, что когда ViewModelочищенный в ViewModelLocator, базовый класс для ViewModels (ViewModelBase) отменяет регистрацию любых подписанных сообщений.Мне не нужно ничего делать, так как MVVM Light Toolkit справляется с этим для меня.Однако, когда я использую их в представлениях, я должен явно отменить их регистрацию во время закрытия, например, так:
Messenger.Default.Unregister(this);
Я полагаю, я мог бы реализовать базовый класс для наследования представлений.
Однако меня поражает, что, возможно, это запах кода при использовании Messenger в View ... он работает, но это может быть не лучшим способом.Мне интересно, нужно ли мне вместо этого создать свойство в ViewModel и связать с ним любую часть элементов View.В примере сокрытия формы свойство может быть логическим значением с именем «Показать».Размышляя об этом, я вижу, что во многих случаях это приводит к необходимости создания ValueConverter.Один способ кажется менее проверяемым.Другой способ, по-видимому, требует гораздо больше кода и, возможно, введения избыточных ValueConverters, которые могут стать запахом кода сами по себе.
Итак (после всего этого) мой вопрос таков:
Является ли предпочтительным использование сообщений в представлении или лучше добавить свойства (и, возможно, ValueConverters), чтобы позволить ViewModel управлять им более привязываемым образом?