使用"vanilla"WPF(没有像Prism这样的MVVM框架).
让我先说一下,我绝对主张尽可能对抽象/接口与实现进行编码.
在WPF中,当您在视图中进行绑定时,您实际上并未编写针对viewmodel接口的绑定.您实际上是绑定viewmodel/datacontext的实现.我认为你甚至可以争辩说你绑定了一个空白画布,因为视图并没有真正知道它将在运行时绑定到什么.
那么视图模型接口是否包含视图将绑定到无用抽象的每个属性?应该查看模型接口更精简,仅包含更改状态(或处理命令等)所需的方法.
我希望这个问题有道理.:)
恕我直言,ViewModel是View的模型.90%的情况下,它们可能是1对1 ......有用的部分是将逻辑移回到比XAML更可测试的东西.它们共同组成UI,但UI行为与UI表示分离.
就个人而言,我没有使用ViewModel接口.在命令模式和WPF和Silverlight使用的松散绑定之间,我不认为抽象会有用.
我可能会在一个系统中使用ViewModel接口,其中行为和视图状态根据某些业务标准而有很大差异.例如,如果您的View正在进行驱动程序许可证字段编辑,并且所需的字段因州而异,则可以为绑定到IStateDriversLicenseViewModel接口的单个复杂视图创建案例.正确的可以是基于您正在处理的状态的依赖注入,并且可以暴露像IsOrganDonorSectionVisible这样的属性,以允许视图反映正确的更改.但是,在这种情况下,我怀疑由用户控件组成的视图会导致更少的问题和更少的维护复杂性.