WPF最佳实践:自定义控件是否适用于MVVM设计?

m-y*_*m-y 15 c# wpf custom-controls mvvm

我正在寻找创建一个我可以在我的页面上重用的公共控件:一个AddressControl,它有Address1,Address2,City,State,Zip等...

最初我刚刚创建了一个AddressEntity包含所有这些项并实现的class()INotifyPropertyChanged.我在AddressControl的Code-Behind中将该类作为DependencyProperty包含在内,并将其用作DataContext以绑定其属性.

然后,有人说我的代码很难看,我应该看看MVVM.看着它,我认为:

  • AddressEntity.cs只是数据的容器(即Address1,Address2等)和成员(即Clone,ToString等)
  • 我需要一些AddressViewModel来包装我的AddressEntity并提供PropertyNotification更改,验证等.
  • 我需要以某种方式为此提供"视图".

问题是我见过的每个例子都有一个UserControl作为View而不是CustomControl.在我深入研究之前......

  • 是否可以在此示例中使用MVVM +自定义控件?
  • 除了UserControl与CustomControl的主要区别之外,它与View几乎完全相同(UserControl vs CustomControl)吗?基本上,我的CustomControl真的只是一个视图吗?

参考:WPF的Model-View-ViewModel(MVVM)设计模式

NVM*_*NVM 20

CustomControls永远不会用mvvm完成.

您想要的是数据的可重用视图(用户控件),而不是控件(自定义控件).

UserControls和CustomControls是两个完全不同的野兽.

编辑:

尽管UserControls最初是为什么开发的,但在MVVM中,当您需要特定于模型/视图模型的可重用视图时,通常会使用UserControl.它只是XAMl没有任何代码(除了自动生成的InitializeComponent东西).通常,您将UserControl保存在您使用它的同一个项目中.

当你想要一个通用件的功能,这需要视你去CustomControl 具有潜在用途外连你目前的应用范围.这里控件实际上是在代码文件中定义的,外观(可以覆盖)来自资源字典中的XAML.通常,您将CustomControl保存在一个单独的ControlLibrary项目中,并引用您希望在其中使用的项目中的库.

在充分尊重WallStreetProgrammer的情况下,仅根据您是否需要无外观控制来选择用户控件和自定义控件之间有点天真.