совместное использование двух приложений WPF с использованием MVVM light - PullRequest
1 голос
/ 08 ноября 2011

Используя 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

Что я делаю не так? Является ли определение локатора в представлениях как ресурса даже лучшим подходом?

1 Ответ

3 голосов
/ 08 ноября 2011

Вы не можете использовать Source={DynamicResource Locator} в своем переплете. Если вы используете свойство Source, вам нужно использовать StaticResource

...