WPF двухпанельное приложение - повторно использовать или создать новый экземпляр панели VM? - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть приложение WPF, главное окно которого содержит две панели.Расположение довольно стандартное.Левая панель представляет собой список объектов.На правой панели отображается информация об объекте, выбранном на левой панели.

Прямо сейчас у меня есть левая панель непосредственно в XAML окна, хотя я думаю, что это должен быть собственный UC / View.Правая панель закодирована как UC.ViewModel для главного окна имеет поле, которое является VM для правой панели (назовите его свойствами VM).Свойства VM инкапсулируют данные для выбранного объекта из модели.

Когда на левой панели выбран другой объект, я вижу два варианта: 1) Создание нового экземпляра свойств VM и загрузка соответствующих данных.из модели 2) Загрузить соответствующие данные из модели в существующую виртуальную машину свойств и выдать соответствующие уведомления об изменениях [Моя текущая реализация]

Есть ли преимущество или предпочтительный способ действий между двумя вышеупомянутыми вариантами?Я пропускаю лучший третий вариант?* Edit * Может быть, лучший вопрос - каковы преимущества и недостатки этих двух методов?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Вы описываете очень стандартный сценарий в мире MVVM.Я полагаю, у вас есть небольшая архитектурная проблема, которая, если ее решить, сделает этот вопрос спорным.«Список», из которого вы делаете свой выбор, должен уже быть списком моделей представлений, которые обертывают «объект», то есть модель.Представление свойств должно быть просто привязано к выбранной виртуальной машине.

0 голосов
/ 20 сентября 2018

Есть ли преимущество или предпочтительный способ ведения дел между двумя вариантами выше?

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

Если вам необходимо кэшировать экземпляры, вы можете использовать контейнер IoC или пользовательский контейнер кэширования, который разрешает экземпляры для вас.Например, вы можете настроить контейнер так, чтобы он всегда возвращал один и тот же экземпляр одного и того же класса или каждый раз возвращал новый экземпляр в зависимости от ваших требований.

Но на самом деле существует «предпочтительный способ».Ваши требования определяют, как лучше всего решить вашу конкретную проблему или вариант использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...