Я искал создание общего элемента управления, который я смогу повторно использовать на своих страницах: AddressControl, у которого есть Address1, Address2, City, State, Zip и т. д ...
Первоначально я просто создал класс ( AddressEntity
), который содержал все эти элементы и реализовал INotifyPropertyChanged
. Я включил этот класс как DependencyProperty в свой скрытый код для AddressControl и использовал его как DataContext для привязки к его свойствам.
Затем кто-то сказал, что мой код уродлив, и я должен изучить MVVM. Глядя на него, я предполагаю, что:
Проблема в том, что каждый пример, который я когда-либо видел, имеет UserControl в качестве View, а не CustomControl. Прежде чем я углублюсь в это ...
Ссылки: Шаблон проектирования Model-View-ViewModel (MVVM) для WPF
Пользовательские элементы управления никогда не выполняются с помощью mvvm.
Вам нужно многократно используемое представление (пользовательский элемент управления) ваших данных, а не элемент управления (настраиваемый элемент управления).
UserControls и CustomControls - два совершенно разных существа.
РЕДАКТИРОВАТЬ:
Независимо от того, почему изначально были разработаны UserControls, в MVVM обычно вы используете UserControl, когда вам нужно повторно использовать представление, специфичное для вашей модели / модели представления. Это просто XAMl без какого-либо кода (за исключением автоматически сгенерированного материала InitializeComponent). Обычно вы сохраняете UserControl в том же проекте, в котором вы его используете.
Вы выбираете CustomControl, когда вам нужна общая функциональность, требующая представления и , которые потенциально могут использоваться даже за пределами области видимости. вашего текущего приложения. Здесь элемент управления фактически определяется в файле кода, а внешний вид (который можно переопределить) передается через XAML в словаре ресурсов. Как правило, вы сохраняете CustomControl в отдельном проекте ControlLibrary и ссылаетесь на библиотеку в проекте, в котором хотите его использовать.
С должным уважением к WallStreetProgrammer, выбор между пользовательским элементом управления и настраиваемым элементом управления, основанный исключительно на том, хотите ли вы безразличный контроль немного наивен.
При использовании MVVM Модель и ViewModel не должны зависеть от представления, то есть им не важно, какой вид представления их использует.
Разница между пользовательским элементом управления и пользовательским элементом управления в WPF заключается в том, что пользовательский элемент управления не выглядит и может быть настроен с помощью своего ControlTemplate. Это то, что вам следует написать, если вы пишете общую библиотеку элементов управления, как это делает Microsoft. Однако, если у вас есть определенный вид для вашего элемента управления, просто используйте пользовательский элемент управления, он намного быстрее, но будет иметь только один вид, тот, который вы для него определяете.
Обычно в проекте MVVM используется сочетание настраиваемых элементов управления и пользовательских элементов управления. Например, вы, вероятно, использовали бы набор настраиваемых элементов управления от Microsoft (например, текстовые поля и текстовые блоки) и объедините их в пользовательские элементы управления.