MVVM + Datacontext + DataTemplate + Blend = 问题

Posted

技术标签:

【中文标题】MVVM + Datacontext + DataTemplate + Blend = 问题【英文标题】:MVVM + Datacontext + DataTemplate + Blend = problems 【发布时间】:2009-04-06 13:29:36 【问题描述】:

我目前在 WPF 项目中使用 MVVM,一切正常。 我有一个主视图和许多详细视图,我使用 MasterViewModel 中的 currentView 属性进行管理。通过使用数据模板,我将视图绑定到视图模型。 事实上,我的主视图有一个内容控件,其内容属性绑定到我的 CurrentView 属性。当我将此 currentview 属性设置为 viewmodel 或其他时,它会调用相应的模板。

我的问题是,使用它,我的详细视图没有明确的数据上下文,因为它是由我的数据模板放置的。所以在混合中,当我打开视图以编辑其设计时,我没有数据可以绑定到我的视图。如果我为我的详细视图设置了一个数据上下文,在混合中我可以看到我可以绑定的所有数据,但是在运行时,由数据模板设置的数据上下文被我的详细视图中设置的数据上下文覆盖,所以我在运行时没有数据。

有谁知道我如何创建一个好的 MVVM 项目,视图由数据模板管理,数据上下文可以通过 Blend 看到?

谢谢,

【问题讨论】:

嗨,斯蒂夫。你有代码要分享吗? 其他问题,为什么你的视图模型绑定到视图?应该是相反的,视图模型绑定到视图。 嗨,Ray,事实上,我使用的原理与您在此处看到的相同:codeproject.com/KB/WPF/InternationalizedWizard.aspx 您有一个具有 currentView 属性(作为对象)的主视图模型。您有两个详细视图模型(让我们将它们命名为 VMdetail1 和 VMdetail2)。在我的主视图中, 我有一个 contentControler,它的源绑定到 MasterViewModel.CurrentView 属性。在我的 xaml 资源中,我有这样的数据模板: 在我看来,我没有数据上下文 DetailViews 数据上下文由数据模板在运行时设置。当您将当前视图更改为 viewmodel1 时,它会使用数据模板加载相应的视图。我的问题是混合你看不到要在细节视图中绑定的数据,因为没有数据上下文。如果我在我的中添加一个数据上下文 【参考方案1】:

我有一篇关于这个问题的博文:http://www.robfe.com/2009/08/design-time-data-in-expression-blend-3/

我的帖子都是关于在混合中显示数据不必在运行时显示甚至创建该数据。

【讨论】:

你的帖子真好。这是解决该问题的最佳方法。我花了 10 个小时才找到“假”数据上下文。 谢谢!当您说花了 10 个小时时,您认为我可以稍微改进一下帖子吗?【参考方案2】:

我在这篇文章中解决了一个类似的问题: How can I use Expression Blend to edit a DataTemplate created in Visual Studio?

【讨论】:

以上是关于MVVM + Datacontext + DataTemplate + Blend = 问题的主要内容,如果未能解决你的问题,请参考以下文章

通过 MVVM 模式创建 UserControl - DataContext 并绑定到父级

MVVM从TabControl绑定到Page.DataContext

WPF入门——DataContext

MVVM 下 ContextMenu的命令绑定

如何在MVVM中使用相同的ViewModel拥有多个视图?

WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参