Кажется, что Visual Studio 2008 Designer не нравится UserControls, которые ссылаются на MVVM-Light ViewModelLocator. Я получаю сообщение об ошибке вроде:
Не удалось создать экземпляр типа 'MyUserControl'.
Например, следующий XAML вызовет такое поведение, если MyUserControl использует ViewModelLocator для установления своего DataContext.
<Page x:Class="MyProject.Views.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Views="clr-namespace:MyProject.Views"
>
<Grid>
<Views:MyUserControl/>
</Grid>
</Page>
MyUserControl чрезвычайно прост:
<UserControl x:Class="MyProject.Views.MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding MyNestedViewModel, Source={StaticResource Locator}}"
>
<Grid>
<TextBlock>Hello</TextBlock>
</Grid>
</UserControl>
А свойство «MyNestedViewModel» просто создает экземпляр класса MyNestedViewModel, который не имеет кода в своем конструкторе по умолчанию.
Два вопроса:
- Правильно ли я использую ViewModelLocator? То есть его можно использовать во вложенных представлениях или он предназначен только для представлений верхнего уровня?
- Может ли это быть еще одной ошибкой в Cider, дизайнере Visual Studio 2008?
Обратите внимание, что все работает отлично во время выполнения. У меня есть проблемы только во время разработки. Но я ненавижу кодирование слепого XAML.