Я строю приложение WPF, которое очень упрощенным выглядит примерно так:Сплит вид на два отдельных видах
У меня есть ApplicationView, который держит меню и ContentControl. ContentControl привязывается к свойству CurrentViewModel, которое задается в меню и отображается его соответствующим представлением (Views и ViewModels связаны с DataTemplates, определенными в App.xaml).
Я нашел этот подход на Rachel Lim's blog
Таким образом, в этом примере мой взгляд содержит список обязанностей, а также окно «Подробности» в выбранной обязанности.
Эта настройка работает нормально, но я думаю, что мои ViewModels становятся слишком толстыми! Не-упрощенная версия этой ViewModel составляет примерно в 500 строк кода, для обработки:
- Initializing фильтры
- Logic для списка фильтрации
- Отображение деталей пошлины
- Добавить/Обновить/Отмена/Удалить логику
Теперь я очень новичок в WPF, но это похоже на слишком много кода, да? И это будет еще больше, прежде чем я закончу это.
В любом случае, я думал, что могу разделить ViewModel на две отдельные модели ViewModels; один для хранения списка и фильтров и один для отображения деталей. Но как это лучше всего сделать?
Я подумал о двух подходах, но не знаю, что является предпочтительным:
Создать DutyMasterView, единственная цель состоит в том, чтобы провести два ContentControls для действительных представлений (т.е. DutyListView и DutyDetailView каждый со своими собственный ViewModel)? Я использую MVVM Light в качестве моей структуры, поэтому, полагаю, я мог бы использовать службу обмена сообщениями, чтобы сообщить DutyDetailViewModel, что Duty для отображения, не так ли? Альтернативно создайте DutyMasterViewModel, который отображает выбранный режим.
Ditch DutyMasterView и гнездо DutyDetailView в DutyListView.
Имеет ли смысл разделить мою ViewModel на две части или я должен просто придерживаться своей толстой ViewModel? Если разделение ViewModel рекомендуется, какие из моих предложений имеют наибольший смысл? Есть ли другие подходы, которые я должен рассмотреть?
500 строк * не * большой файл, на мой взгляд. – Sheridan
Решите, что лучше для вас. По-моему, ViewModels с более чем 500 LOC, как правило, трудно поддерживать. – metacircle
Если задача DutyDetailViewModel заключается в том, чтобы показывать обязанность, я не вижу смысла использовать обмен сообщениями. Просто обновите свойство в главной виртуальной машине, чтобы вернуть другую детальную виртуальную машину. – nmclean