Должен ли я создать ViewModel для каждого элемента в ObservableCollection - PullRequest
1 голос
/ 16 мая 2019

Будучи довольно новым для MVVM в WPF, я сталкиваюсь с дилеммой, для каких элементов нужен собственный ViewModel. Я пишу плагин для программы Revit от Autodesk. Используя предоставленный API, я углубляюсь в параметры элементов и выполняю инженерные расчеты так, чтобы конечному пользователю было легче их понять. Я изложил свой подход на изображении ниже.

Data Flow Method

Элемент является модельным элементом в программе, который выбирается вручную. Затем создается экземпляр класса FPB путем извлечения параметров из элемента и назначения их свойствам FPB. ViewModel содержит ObservableCollection, которая содержит список объектов FPB, выбранных пользователем. Используя комбинированный список, пользователь может выбрать, какую FPB он хочет редактировать. На странице WPF отображаются соответствующие значения свойств, с которыми пользователь должен взаимодействовать для выполнения своих инженерных расчетов.

Используя привязку данных WPF, значения можно изменить в представлении, а затем значение изменить в FPB ViewModel в ObservableCollection. Чтобы записать эти значения обратно в элемент в Revit, изменение должно быть инициировано в ExternalCommand API и обеспечено в транзакции. Затем он выполняет метод, который записывает значения обратно в Revit.

Моя проблема связана с каждым измененным значением в представлении, которое необходимо данным для обновления элемента. Этот элемент выполняет свои собственные вычисления, которые изменяют значения данных. Затем эти обновленные значения необходимо вернуть обратно в представление. Туда и обратно показано ниже.

Вид -> ViewModel -> FPB в ObservableCollection -> Обновить элемент -> FPB в ObservableCollection -> ViewModel -> View

Чтобы придерживаться принципов MVVM, нужно ли создавать FPBViewModel для каждого экземпляра FPB? Позволит ли это облегчить поток данных? Или это просто излишне усложняет поток данных. Я могу добавить фрагменты кода, если это необходимо, но, похоже, это скорее вопрос теории, чем вопрос специфики кода. Заранее спасибо.

...