我应该将UserControl用于我的视图而不是DataTemplates吗?

Rac*_*hel 12 wpf user-controls view datatemplate mvvm

我正在阅读这篇文章,作者提出了使用DataTemplates定义ViewModel的建议,这是一种疯狂的方式(#7).我一直这样做,真的那么糟糕吗?

<DataTemplate DataType="{x:Type local:MyViewModel}">
    <Grid>
        ...
    </Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

我的大多数视图都只是一个定义一个或两个DataTemplate的ResourceDictionary.对我而言,这比为每个ViewModel创建UserControl更有意义.为什么我不想在WPF的可视化树中使用额外的图层?当DataTemplate为我做这件事时,为什么我要照顾将ViewModels映射到Views?这种语法真的是一种"疯子式"吗?

小智 7

没什么不好的,除了非常大的xaml文件和DataTemplates在设计界面上缺乏编辑支持.

如果这些问题伤害了你,你可以随时......

<DataTemplate DataType="{x:Type local:MyViewModel}">
    <local:MyViewModelUserControl />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

  • 我也使用了Will建议的解决方案.我发现它是一个优雅的解决方案 当您拥有复杂的屏幕cinametic时,您可以在多个子视图/视图模型中将其分解,当然,您可以保持视觉设计器的利益,因为整个视图的每个部分都只是其他较小的视图. (2认同)
  • @Rachel:它确实拥有(授予的,有限的)好处.特别是在尝试正确排列所有内容时.我似乎总是在我的数据模板中有一个`Expander`,我不能简单地点击它来展示其内容以进行设计工作...... (2认同)