Рекомендации WPF: используйте настраиваемые элементы управления хорошо работают с дизайном MVVM?

Я искал создание общего элемента управления, который я смогу повторно использовать на своих страницах: AddressControl, у которого есть Address1, Address2, City, State, Zip и т. д ...

Первоначально я просто создал класс ( AddressEntity ), который содержал все эти элементы и реализовал INotifyPropertyChanged . Я включил этот класс как DependencyProperty в свой скрытый код для AddressControl и использовал его как DataContext для привязки к его свойствам.

Затем кто-то сказал, что мой код уродлив, и я должен изучить MVVM. Глядя на него, я предполагаю, что:

  • AddressEntity .cs будет просто контейнером данных (например, Address1, Address2 и т. д.) и членов (например, Clone, ToString и т. д.)
  • Мне нужен AddressViewModel, чтобы обернуть мой AddressEntity и предоставить PropertyNotification Changes, Validation и т. д.
  • Для этого мне нужно каким-то образом иметь "Просмотр".

Проблема в том, что каждый пример, который я когда-либо видел, имеет UserControl в качестве View, а не CustomControl. Прежде чем я углублюсь в это ...

  • Можно ли использовать MVVM + Custom Controls для этого примера?
  • Это почти то же самое (UserControl vs CustomControl), что и View, за исключением основных различий UserControl против CustomControl? В принципе, действительно ли мой CustomControl представляет собой просто представление?

Ссылки: Шаблон проектирования Model-View-ViewModel (MVVM) для WPF

15
задан superjos 5 July 2016 в 17:26
поделиться

2 ответа

Пользовательские элементы управления никогда не выполняются с помощью mvvm.

Вам нужно многократно используемое представление (пользовательский элемент управления) ваших данных, а не элемент управления (настраиваемый элемент управления).

UserControls и CustomControls - два совершенно разных существа.

РЕДАКТИРОВАТЬ:

Независимо от того, почему изначально были разработаны UserControls, в MVVM обычно вы используете UserControl, когда вам нужно повторно использовать представление, специфичное для вашей модели / модели представления. Это просто XAMl без какого-либо кода (за исключением автоматически сгенерированного материала InitializeComponent). Обычно вы сохраняете UserControl в том же проекте, в котором вы его используете.

Вы выбираете CustomControl, когда вам нужна общая функциональность, требующая представления и , которые потенциально могут использоваться даже за пределами области видимости. вашего текущего приложения. Здесь элемент управления фактически определяется в файле кода, а внешний вид (который можно переопределить) передается через XAML в словаре ресурсов. Как правило, вы сохраняете CustomControl в отдельном проекте ControlLibrary и ссылаетесь на библиотеку в проекте, в котором хотите его использовать.

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

20
ответ дан 1 December 2019 в 03:13
поделиться

При использовании MVVM Модель и ViewModel не должны зависеть от представления, то есть им не важно, какой вид представления их использует.

Разница между пользовательским элементом управления и пользовательским элементом управления в WPF заключается в том, что пользовательский элемент управления не выглядит и может быть настроен с помощью своего ControlTemplate. Это то, что вам следует написать, если вы пишете общую библиотеку элементов управления, как это делает Microsoft. Однако, если у вас есть определенный вид для вашего элемента управления, просто используйте пользовательский элемент управления, он намного быстрее, но будет иметь только один вид, тот, который вы для него определяете.

Обычно в проекте MVVM используется сочетание настраиваемых элементов управления и пользовательских элементов управления. Например, вы, вероятно, использовали бы набор настраиваемых элементов управления от Microsoft (например, текстовые поля и текстовые блоки) и объедините их в пользовательские элементы управления.

См. Обзор создания элементов управления

3
ответ дан 1 December 2019 в 03:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: