Используя MVVM Light, у меня есть два приложения WPF, которые ссылаются на общую библиотеку видов. У меня также есть библиотека ViewModels. Библиотека ViewModels имеет ViewModelLocator.
Зависимости довольно просты:
Приложения WPF -> Представления -> ViewModels
Библиотека Views имеет ResourceDictionary и определяет ресурс ViewModelLocator для привязки данных во время выполнения и во время разработки:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:ViewModels;assembly=ViewModels">
<vm:ViewModelLocator x:Key="Locator"/>
</ResourceDictionary>
Проблема в том, что когда я устанавливаю DataContext на элемент верхнего уровня моих просмотров, я получаю исключение:
<UserControl x:Class="Views.WelcomeView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
DataContext="{Binding WelcomeViewModel, Source={DynamicResource Locator}}">
<Grid>
<TextBlock Text="{Binding Text}"/>
</Grid>
</UserControl>
Исключение:
«DynamicResourceExtension» нельзя задать для свойства «Source» типа «Binding». «DynamicResourceExtension» можно установить только для свойства DependencyProperty объекта DependencyObject
Что я делаю не так? Является ли определение локатора в представлениях как ресурса даже лучшим подходом?