如何解决我应该为视图使用UserControl而不是DataTemplates吗?
| 我在阅读这篇文章时,作者建议使用DataTemplates定义ViewModel是一种疯狂的方法(#7)。我一直都这样做,真的那么糟糕吗?<DataTemplate DataType=\"{x:Type local:MyViewModel}\">
<Grid>
...
</Grid>
</DataTemplate>
我的大多数视图只是定义一个或两个DataTemplate的ResourceDictionary。对我来说,这样做比为每个ViewModel创建一个UserControl更好。为什么不需要WPF可视树中的多余图层?以及为什么在DataTemplate为我做时要照顾将ViewModels映射到View?这种语法真的是“疯子方法”吗?
解决方法
没什么不好,除了非常大的xaml文件和DataTemplates在设计图面上缺乏编辑支持之外。
如果这些问题在伤害您,您可以随时...
<DataTemplate DataType=\"{x:Type local:MyViewModel}\">
<local:MyViewModelUserControl />
</DataTemplate>
,DataTemplate的优点在于,它们被强类型化为Viewmodel类。您需要做的就是在View中创建ContentPresenter并将DataContext绑定到VM。如果您的DataTemplate是在ResourceDictionary中定义的,并且具有DataType属性而不是Key,则WPF将在内部为VM类找出正确的DataTemplate并显示它。
但是正如您提到的,我们不能在单独的文件中创建DataTemplate。因此,ResourceDictionary中存在DataTemplates的文件(例如App.xaml)变得非常混乱,并且很难很快管理代码。
所以我的看法是,如果VM很简单,则创建一个DataTemplate。否则,最好创建一个单独的UserControl并将其内容绑定到VM。
,我遇到了性能问题。下两种情况之间存在差异:
1。
<DataTemplate DataType=\"{x:Type local:MyViewModel}\">
<!-- xaml is moved to separate user control -->
<local:MyViewModelUserControl />
</DataTemplate>
2。
<DataTemplate DataType=\"{x:Type local:MyViewModel}\">
<!-- xaml is typed here directly -->
<Border>
...
</Border>
</DataTemplate>
在第一种情况下,呈现结果所需的时间比第二种情况下更长。而这个差异大约是2倍。
我将其作为单独的问题发布
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。