Может ли MVVM-Light ViewModelLocator использоваться во вложенных моделях представления? - PullRequest
1 голос
/ 10 июня 2010

Кажется, что 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, который не имеет кода в своем конструкторе по умолчанию.

Два вопроса:

  1. Правильно ли я использую ViewModelLocator? То есть его можно использовать во вложенных представлениях или он предназначен только для представлений верхнего уровня?
  2. Может ли это быть еще одной ошибкой в ​​Cider, дизайнере Visual Studio 2008?

Обратите внимание, что все работает отлично во время выполнения. У меня есть проблемы только во время разработки. Но я ненавижу кодирование слепого XAML.

1 Ответ

0 голосов
/ 03 ноября 2010

Я сталкиваюсь с той же ситуацией в VS 2010. Частичный обходной путь, который я ПРОСТО обнаружил ...

В вашем UserControl измените DataContext на d:DataContext

<UserControl x:Class="MyProject.Views.MyUserControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         d:DataContext="{Binding MyNestedViewModel, Source={StaticResource Locator}}"
>
<Grid>
    <TextBlock>Hello</TextBlock>
</Grid>
</UserControl>

К сожалению,Я не могу заставить его отображать данные в UserControl YET, только сам UserControl.

...