2009-06-19 1 views
2

При использовании MVVM Visual Studio Template, то ваши ViewModels обязаны DataContexts ваших взглядов в App.xaml.cs что-то вроде этого:Как сделать привязку View/ViewModel в приложениях MVVM, чтобы использовать выражение Expression Blend?

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

А если вы используете Composite Application Library, то вы имеют свои взгляды и ViewModels быть связаны друг с другом в вашем загрузчике/Container/ServerLocator и т.д.

в любом случае, при открытии этих проектов в Expression Blend и открыть файл Просмотр XAML, Expression Blend не знает, какой ViewModel принадлежит к wh ich View, поскольку это связывание выполняется в коде, как в приведенных выше примерах.

Конечно, Вы можете установить DataObjectProvider в вашем XAML так Expression Blend знает, где получить свои данные для этого View, но это нарушает MVVM и шаблон развязки, поскольку ваш взгляд теперь зашитый к конкретному ViewModel. Это как дизайнеры, как правило, работают с Expression Blend на проектах, которые представляют собой нечто большее, чем небольшая демонстрация?

Итак, для тех из вас, кто использует шаблон MVVM и у кого есть дизайнеры, которые используют Expression Blend, как вы храните привязку View/ViewModel, структурированную так, чтобы Expression Blend мог знать, какой вид ViewModel принадлежит тем Views?

ответ

2

Blend действительно загружает и выполняет код, даже если он не запускает приложение. Загрузите образец DataContext, если DesignerProperties.GetIsInDesignMode (...) в конструкторе представления или другом более подходящем методе.