Wpf 可与d:DataContext混合。我错过了什么?

Wpf 可与d:DataContext混合。我错过了什么?,wpf,silverlight,xaml,expression-blend,blendability,Wpf,Silverlight,Xaml,Expression Blend,Blendability,我觉得好像我仍然看到很多指导和建议,说明视图优先方法是在应用程序中获得可混合性的最佳方法。然而,使用d:DataContext、d:DesignData和d:DesignInstance,无论视图和视图模型如何连接在一起,混合性问题不是很容易解决吗 使用DesignInstance,您只需选择一个具体的ViewModel类型以在设计器中使用,就好像获得了视图优先组合一样。事实上,使用DesignInstance实际上比使用IsInDesignMode backflips或仅为在真实viewmod

我觉得好像我仍然看到很多指导和建议,说明视图优先方法是在应用程序中获得可混合性的最佳方法。然而,使用d:DataContext、d:DesignData和d:DesignInstance,无论视图和视图模型如何连接在一起,混合性问题不是很容易解决吗

使用DesignInstance,您只需选择一个具体的ViewModel类型以在设计器中使用,就好像获得了视图优先组合一样。事实上,使用DesignInstance实际上比使用IsInDesignMode backflips或仅为在真实viewmodel中提供设计支持而创建默认构造函数能够更好地分离关注点-您可以从viewmodel类型或公共接口类型继承来创建简单的“designer”viewmodel,这完全取决于设计师。使用DesignData,您甚至不必这样做:只需在XAML中声明性地创建一个假的viewmodel


诚然,在进行上述活动时会有一小部分前期成本,但其结果实际上是比将设计数据与真实viewmodel混合得到的分离更清晰。有什么我遗漏的吗?为什么可混合性仍然是一个很大的问题?

如果您有整个视图的模型数据,那么使用d:DataContext、d:DesignData和d:DesignInstance应该可以提供可混合性

因此,您的问题的答案是,简而言之,无论您在运行时如何使用视图(视图优先或视图模型优先),您仍然可以具有可混合性。如果在运行时版本中有一些viewmodel逻辑或初始化,则应确保在设计时实例中也有相同的逻辑或初始化


许多人试图通过创建两个视图模型来找到一种不需要重复工作的方法。我确实同意,它也能提供更好的分离。

很好地回答了你的问题,我完全同意:)