可以在嵌套的ViewModels中使用MVVM-Light ViewModelLocator吗?

时间:2010-06-10 00:34:52

标签: wpf visual-studio mvvm-light

Visual Studio 2008 Designer似乎不喜欢引用MVVM-Light ViewModelLocator的UserControls。我收到如下错误消息:

  

无法创建“MyUserControl”类型的实例。

例如,如果MyUserControl使用ViewModelLocator建立其DataContext,则以下XAML将导致此行为。

<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设计师的另一个错误吗?
  3. 请注意,一切都在运行时完美运行。我在设计时才遇到问题。但我讨厌盲目编码XAML。

1 个答案:

答案 0 :(得分:0)

我在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本身。