2

当您使用MVVM Visual Studio Template时,您的 ViewModel 将绑定到 App.xaml.cs 中的 View 的 DataContexts,如下所示:

MainView mainView = new MainView();
mainView.DataContext = new MainViewModel();
mainView.Show();

如果您使用Composite Application Library,那么您的 Views 和 ViewModels 在您的 Bootstrapper/Container/ServerLocator 等中绑定在一起。

在任何情况下,当您在 Expression Blend 中打开这些项目并打开一个 View XAML 文件时,Expression blend 不知道哪个 ViewModel 属于哪个 View,因为此绑定是在上述实例中的代码中完成的。

您当然可以在 XAML 中设置DataObjectProvider,以便 Expression Blend 知道从哪里获取该 View 的数据,但这会破坏 MVVM 和解耦模式,因为您的 View 现在已硬连接到特定的 ViewModel。这就是设计师通常在不仅仅是一个小演示的项目上使用 Expression Blend 的方式吗?

因此,对于那些使用 MVVM 模式并且拥有使用 Expression Blend 的设计师的人,您如何保持 View/ViewModel 绑定的结构化,以便 Expression Blend 可以知道哪个 ViewModel 属于哪个 View?

4

1 回答 1

2

Blend 确实加载并执行代码,即使它不运行应用程序。如果 DesignerProperties.GetIsInDesignMode(...) 在视图构造函数或其他更合适的方法中加载一些示例 DataContext。

于 2009-06-19T10:42:00.817 回答