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 つの質問:
- ViewModelLocator を正しく使用していますか? つまり、ネストされたビューで使用できますか、それともトップレベルのビューのみを対象としていますか?
- これは、Visual Studio 2008 デザイナーである Cider の別のバグでしょうか?
すべてが実行時に完全に機能することに注意してください。設計時にのみ問題があります。しかし、XAML を盲目的にコーディングするのは嫌いです。