我正在尝试找出在MVVM中耦合我的Views和ViewModel的最佳方法,我已经使用 typed DataTemplates确定了ViewModel优先方法,如{{3}中所述和this article。我正在使用Prism并拥有多个具有自己的项目/类库的模块。
我的问题是:我的DataTemplates在我的解决方案中应该在哪里?
App.Current.MainWindow.Resources.MergedDictionaries
?我希望这足以描述我正在尝试做的事情。
更新:查看所选答案的评论。
答案 0 :(得分:2)
更新以解释更清楚。
我会说你的DataTemplate是通用的: 即你有一个绑定到ViewModel的UserControl,而ViewModel有BaseViewModel,它暴露了某种属性。您的DataTemplate正在显示这些属性。因此,您可以在实现BaseViewModel的每个ViewModel上使用此DataTemplate。
最好将其放在App.xaml
中,这样您就可以使用密钥将其拉出来并应用于项目中的不同位置。
但如果您的DataTemplate非常具体,
即有一个UserControl仅绑定在该ViewModel中的指定属性上,并且您知道没有其他控件将绑定到该ViewModel,您将希望放入相同的Xaml文件的Resources
或您定义的位置UserControl
。
答案 1 :(得分:2)
我确信这里最好的方法是使用Themes \ Generic.xaml资源文件。这是WPF / Silverlight主题引擎使用的文件(它应该完全位于文件夹主题中并且名称完全为Generic.xaml),并包含通过整个应用程序共享的资源。您还可以在名称为Generic.DataTemplates.xaml的文件夹主题中创建单独的文件,并从Generic.xaml添加指向它的链接。 Google对generic.xaml了解很多,或者您可以在我的答案中查看更多详细信息:WPF Prism - Where to put Resources?
答案 2 :(得分:0)
根据Microsofts App Studio,DataTemplates应该位于Views Directory下的DataTemplates子目录中。通用应用程序具有Windows UI和Windows Phone UI的此目录,因此它不在共享项目中,因为它们不是相同的。不要使用Converge PRISM架构。它设计完全错误!这不是用Windows和Windows Phone架构编写的,但他们称之为Converged。它本应完全重新设计,就像在微软App Studio中一样。不要寻找依赖注入它不在其中而不是需要它。大多数使用依赖注入来存根或伪接口。设计数据的DataContext现在可以很好地使用json数据,因此依赖注入组件会过度。