WPF Best Practices: хорошо ли работают пользовательские элементы управления с дизайном MVVM? - PullRequest
15 голосов
/ 17 августа 2010

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

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

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

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

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

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

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

Ответы [ 2 ]

18 голосов
/ 17 августа 2010

CustomControls никогда не выполняются с mvvm.

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

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

EDIT:

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

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

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

3 голосов
/ 17 августа 2010

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

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

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

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

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