1

Visual Studio 2008 Designer は、MVVM-Light ViewModelLocator を参照する UserControls を好まないようです。次のようなエラー メッセージが表示されます。

タイプ '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 クラスのインスタンスを単純にインスタンス化します。

2 つの質問:

  1. ViewModelLocator を正しく使用していますか? つまり、ネストされたビューで使用できますか、それともトップレベルのビューのみを対象としていますか?
  2. これは、Visual Studio 2008 デザイナーである Cider の別のバグでしょうか?

すべてが実行時に完全に機能することに注意してください。設計時にのみ問題があります。しかし、XAML を盲目的にコーディングするのは嫌いです。

4

1 に答える 1

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 自体にデータを表示することはできません。

于 2010-11-03T17:36:06.157 に答える