【发布时间】:2023-03-05 00:41:02
【问题描述】:
我正在考虑创建一个可以在我的页面上重复使用的通用控件:一个包含 Address1、Address2、City、State、Zip 等的 AddressControl...
最初我只是创建了一个包含所有这些项目的类 (AddressEntity) 并实现了INotifyPropertyChanged。我将该类作为 DependencyProperty 包含在 AddressControl 的代码隐藏中,并将其用作 DataContext 以绑定到其属性。
然后,有人说我的代码很丑,我应该研究一下 MVVM。看着它,我假设:
- AddressEntity.cs 将只是数据(即 Address1、Address2 等)和成员(即 Clone、ToString 等)的容器
- 我需要一些 AddressViewModel 来包装我的 AddressEntity 并提供 PropertyNotification 更改、验证等。
- 我需要以某种方式对此有一个“视图”。
问题是我见过的每个示例都有一个 UserControl 作为 View 而不是 CustomControl。在我深入研究之前......
- 是否可以在本示例中使用 MVVM + 自定义控件?
- 除了 UserControl 与 CustomControl 的主要区别外,它与 View 是否几乎相同(UserControl 与 CustomControl)?基本上,我的 CustomControl 真的只是一个 View 吗?
【问题讨论】:
-
下面的两个答案似乎相互矛盾。我现在很困惑......特别是因为第二个答案听起来更有可能,但第一个答案有(到目前为止 3 票)。
-
我同意 NVM。我个人也觉得Custom Controls和MVVM不能很好的结合在一起。你在同一个项目中确实有 CC 和 UC,但我想不出我的 CC 有一个 VM,而有 UC 的 VM 是有道理的。
-
@akjoshi 我不明白为什么纯 WPF 和 MVVM 彼此有任何关系。事实上,无论是自定义控件还是用户控件,您都不需要使用 MVVM,我什至会说您在创建用户或自定义控件时一定不能使用 MVVM。但是使用这些控件是的,MVVM 是使用它们的好方法。我认为很容易区分“现在我制作业务逻辑并使用 MVVM”和“现在我创建了一个控件但从未听说过 mvvm”。例如,我们构建了一个完整的图形控件,节点连接等都是自定义控件,但使用这个控件主要是通过视图模型完成的。
-
@dowhilefor 是的,总是在那里,没有必要使用 MVVM。您自己提供了为什么 MVVM 不适合 CC 的提示 - “商业逻辑”;一般来说,CC 没有任何业务逻辑,只有控件的实现和模板,CC 应该可用于多个应用程序(如您的图表控件)。客户端应用程序使用 MVVM with CC 绝对有意义,但不适用于 创建 CC。
-
@akjoshi 好的,比我们在同一页上,我只是想念你了。
标签: c# wpf mvvm custom-controls