我正在使用MVVM开发一个大型WPF项目。我们目前仍在决定我们使用代码隐藏的程度,但到目前为止我们已经完全没有了(除了Windows上的InitializeComponent)。但是,我最近开始使用类型化的DataTemplates将视图应用于我的视图模型,看起来这些视图(如windows)在没有InitializeComponent调用的情况下不起作用,根据this文章,我认为它们会这样做。 DataTemplate只是声明了一个视图。当我删除视图的代码隐藏文件时,视图模型呈现完全空白。当我把它放进去时,没关系。我有什么想法可能会看到这种行为?
答案 0 :(得分:1)
首先,您可能忽略了一些重要的事情:我在学习MVVM / WPF时也大量使用了这篇文章,我从未想过它建议从View.cs中删除InitializeComponent调用。
事实上,快速搜索显示以下内容(在中继命令逻辑下)[强调我的]:
应用中的每个视图都为空 代码隐藏文件,除了 调用的标准样板代码 类中的InitializeComponent 构造强>
我一直在应用你描述的相同模式,同时为每个视图保留默认的代码隐藏,到目前为止它一帆风顺。 :)
此外:如果您查看默认InitializeComponent()
的定义,您将看到生成的代码包含以下语句:
System.Windows.Application.LoadComponent(this, resourceLocater);
我没有经过测试以确保是这种情况,但是我会在你的灵魂上打赌一个小小的金牌,防止这条线的执行会影响你的观点的呈现......;)
答案 1 :(得分:0)
根据djacobson的说法,即使Josh Smith在我的问题中引用的解决方案也无法在没有代码隐藏的情况下呈现其观点,因此说明这一点的行可能会产生误导。似乎避免代码隐藏的唯一方法是将它们放入UserControls中,而只是将XAML直接保存在< DataTemplate>标签